2013-02-22 73 views
0

我想解析来自谷歌地图搜索的JSON数据。 我试了两个JACKSON,现在我试着JSON SIMPLE。他们都给出了同样的错误。JSON解析。意想不到的字符(t)在位置2. JAVA

首先,我正在Google地图上进行搜索。

String urlString = "http://maps.google.com/maps?f=q&source=s_q&output=json&start=0&q="+ "Stockholm" + "+Gym"; 

给我JSON而(1); {标题: “斯德哥尔摩体育馆 - 谷歌地图”,URL:“/地图˚F= Q \ x26source = s_q \ x26start = 0 \ x26q =斯德哥尔摩+健身房\ x26ie = UTF8 \ x26hq = Gym ..............依此类推 我正在更换while(1);用“”;在返回字符串之前

问题来了,当我试图解析它

JSONParser parser = new JSONParser(); 

    String jsonString = ""; 

// UriHandler.mapSearchJson是返回jsonString的方法。

String jsonData = UriHandler.mapSearchJSON(jsonString); 

    Object obj = ""; 
    try { 

     obj = parser.parse(jsonData); 

    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    JSONObject jsonObj = (JSONObject) obj; 

    String title = (String) jsonObj.get("title"); 
    System.out.println(title); 

这给了我例外。 意外的字符(t)在位置2上。

当我贬低它时。当它试图解析字符串时,它会一路走来。那么obj = null。

什么在世界上我做错了。

谢谢!

+0

注意,对于JSON的规则比JavaScript对象文本的规则更加严格。非上市字段名是在对象文字确定,但不是在JSON。 – 2013-02-22 14:28:02

回答

6

由于包围其他人已经提到,非加引号的字段名称不是标准的JSON。然而,杰克逊(或者其他人)有一个set of option settings,允许它使用非标准的工作,但常见的JSON衍生物:

JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES 

将使不带引号的字段名的处理。

2

响应无效JSON,因为密钥名称未用双引号引起来。

2

{标题: “斯德哥尔摩健身房”

是无效的JSON,它应该是这样的:

{"title":"stockholm Gym" 

注意如何title"双引号

0

我试图解析从kafka(kafka twitter生产者)返回的json时遇到此错误。

的返回信息被包括一些额外的文本比JSON其他(KeyedMessage(Twitter的test_english,NULL,NULL)。正因为如此,我面临这个错误。

KeyedMessage(twitter-test_english,null,null,{"created_at":"Sat Apr 23 18:31:10 +0000 2016","id":723942306777337856,"id_str":"723942306777337856"} 

仅传递消息部分从返回JSON和将其转换成字符串。

{"created_at":"Sat Apr 23 18:31:10 +0000 2016","id":723942306777337856,"id_str":"723942306777337856"} 

message = new KeyedMessage("twitter-test_english", (String)queue.take()); 
//System.out.println("This is message"+message.message()); 
String message_string = message.message().toString(); 
JsonParse.toParseJson(message_string);