解码JSON字符串以在Java中生成对象时的解析问题

nam*_*olk 5 java json jackson

场景:

我正在使用以下代码解码JSON字符串以使用它生成对象。

在此处输入图片说明

{"av":{"tid":"1000","sslist":[{"ss":{"ssId":"1","ssName":"Test ss "name one"}},{"ss":{"ssId":"2","ssName":"Test ss name two"}}],"hl":{"lc":0}}}
Run Code Online (Sandbox Code Playgroud)

现在,我有几百元sslist,所有的失败,因为一个血淋淋"ssName第一ss要素。

但是,当String在createJsonParser()方法的最开始处进行解析时,会引发此错误。

题 :

我只想忽略容易出错的节点,而继续处理其他数百个正确的节点。还有其他方法吗?

代码:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonNode;

public class JsonReader {

        private void readJsonMethodThree(String jsonString) throws JsonParseException, IOException{

            ObjectMapper    mapper          = new ObjectMapper();
            JsonFactory     factory         = mapper.getJsonFactory();
            JsonParser      jsonParser      = factory.createJsonParser(jsonString);
            JsonNode        jsonNode        = mapper.readTree(jsonParser);

        }

}
Run Code Online (Sandbox Code Playgroud)

例外情况:

Exception in thread "main" com.fasterxml.jackson.core.JsonParseException: Unexpected character ('n' (code 110)): was expecting comma to separate OBJECT entries
 at [Source: java.io.StringReader@12cc95d; line: 1, column: 69]
Run Code Online (Sandbox Code Playgroud)

小智 4

yourjsonstring = yourjsonstring.replaceAll("\"name", "name");
Run Code Online (Sandbox Code Playgroud)

或者使用更通用的模式,这只是示例。

  • 虽然您的解决方案可能会解决当前问题,但实际的解决方案是让生产者生成有效的 JSON。 (2认同)