2013-07-12 203 views
3

场景:解析问题,当一个JSON字符串生成Java对象

我使用下面的代码来解码JSON字符串用它来生成对象。

enter image description here

{"av":{"tid":"1000","sslist":[{"ss":{"ssId":"1","ssName":"Test ss "name one"}},{"ss":{"ssId":"2","ssName":"Test ss name two"}}],"hl":{"lc":0}}} 

现在,我的sslist数百元素和所有在第一ss元素失败,因为一个血腥"ssName

但是,当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); 

     } 

} 

例外:

Exception in thread "main" com.fasterxml.jackson.core.JsonParseException: Unexpected character ('n' (code 110)): was expecting comma to separate OBJECT entries 
at [Source: [email protected]5d; line: 1, column: 69] 
+0

在将每个属性的文本作为JSON发送到浏览器之前,您应该转义它们中的文本。 – crush

+0

谢谢。但是我在阅读时正在寻找一种方法来处理它。 – namalfernandolk

+4

不,你的JSON生产者应该照顾这个 – epoch

回答

3
yourjsonstring = yourjsonstring.replaceAll("\"name", "name"); 

,或者使用更通用的图案,这只是例子。

+1

虽然您的解决方案可能解决当前问题,但实际的解决方案是让生产者生成有效的JSON。 – hd1

+0

完全同意。但是这样的解决方案之前提到过,问题仍然没有解决。可能不存在生产者的访问权限,或者已经创建了很多bad-json消费者。所以这样的化妆品解决方案可能是唯一一个:) – Danila

+0

谢谢你Danila!我也试过这个。但是有很多Bad字符导致这个错误。所以,我认为我不应该是第一个面对这样的问题,并且可能有一个预定义的库/包来处理这些问题。这是我问的。我试图在不触摸服务器代码的情况下做到这一点。但现在我正在重新考虑服务器端实现,因为没有其他选择。 – namalfernandolk

0

当JSON的数据类型与cassandra中声明的数据类型不匹配时,您也可能会遇到此错误。具体来说,检查JSON值是否应该是一个list类型而不是一个单例。