2010-07-29 19 views
1

我想在Android应用程序中使用gson解析一个json对象,测试在模拟器中非常优雅地传递,而我实际使用的设备,这些问题开始 我得到异常如下
com.google.gson.JsonParseException:解析JSON源失败:java.io.BufferedReader为Json - 对此问题感到困惑

.....: com.google.gson.JsonParseException: Failed parsing JSON source: [email protected] to Json 
......: print stack Failed parsing JSON source: [email protected] to Json 
.......:com.google.gson.JsonParseException: Failed parsing JSON source: [email protected] to Json 
.......: at com.google.gson.JsonParser.parse(JsonParser.java:59) 
........: at com...xx..allmenus.DiningDetail$3.run(DiningDetail.java:361) 
........: Caused by: com.google.gson.ParseException: Encountered " <IDENTIFIER_SANS_EXPONENT> "HTTP "" at line 1, column 1. 
07-29 11:33:55.186: WARN/System.err(2110): Was expecting one of: 
07-29 11:33:55.186: WARN/System.err(2110):  <EOF> 
07-29 11:33:55.186: WARN/System.err(2110):  <DIGITS> ... 
07-29 11:33:55.186: WARN/System.err(2110):  "null" ... 
07-29 11:33:55.186: WARN/System.err(2110):  "NaN" ... 
07-29 11:33:55.194: WARN/System.err(2110):  "Infinity" ... 
07-29 11:33:55.194: WARN/System.err(2110):  <BOOLEAN> ... 
07-29 11:33:55.194: WARN/System.err(2110):  <SINGLE_QUOTE_LITERAL> ... 
07-29 11:33:55.194: WARN/System.err(2110):  <DOUBLE_QUOTE_LITERAL> ... 
07-29 11:33:55.202: WARN/System.err(2110):  ")]}\'\n" ... 
07-29 11:33:55.210: WARN/System.err(2110):  "{" ... 
07-29 11:33:55.210: WARN/System.err(2110):  "[" ... 
07-29 11:33:55.217: WARN/System.err(2110):  "-" ... 
07-29 11:33:55.217: WARN/System.err(2110):  
07-29 11:33:55.217: WARN/System.err(2110):  at com.google.gson.JsonParserJavacc.generateParseException(JsonParserJavacc.java:705) 
......: at com.google.gson.JsonParserJavacc.jj_consume_token(JsonParserJavacc.java:587) 
......:  at com.google.gson.JsonParserJavacc.parse(JsonParserJavacc.java:62) 
......: at com.google.gson.JsonParser.parse(JsonParser.java:54) 
.....:  ... 1 more 

请提出一个解决方案,我使用GSON我使用1.4稿。该代码是

  URLsource = new URL("http://.........); 
     in = new BufferedReader(new UnicodeReader(URLsource.openStream(), "UTF-8")); 
     jse = new JsonParser().parse(in); 
    in.close(); 
      JsonArray info = jse.getAsJsonObject().getAsJsonArray("info"); 

在URL中的o/p浏览器是

{"info":[{"restaurant_id":"","name":"Vie de France","campus_id":"","address":"600 Maryland Ave SW","city":"WASHINGTON","state":"DC","neighborhood":"","neighborhood_urlname":"","zipcode":"20024","average_entree":"6.29","chain_id":"994","phone":"(202) 554-7870","is_voicestar":"0","menu_type":"1","url":"","logo":"","details":"","latitude":"38.886877","longitude":"-77.019913","properties":"rmwa","reviews":"y","yelp_phone":"2025547870","reservation_id":"","reservation_url":"","price":"","cross_street":"","public_transit":"","restaurant_description":"","payment_methods":"","hours":"","next_open":"","restaurant_status":"","is_preorder":"","citysearch_hours":" ","minimum_order":"","minimum_order_2":"","delivery_rate":"","delivery_time":"","delivery_info":"","misc_info":"","delivery_charge":"","delivery_charge_2":"","is_pickup":"","is_delivery":"","minimum_tip_amount":"","minimum_tip_percent":"","restaurant_account_id":"","urlname":"\/dc\/washington\/239256-vie-de-france\/","facebook_fan_page":"","twitter_page":"","is_dz":"0","loyalty":"","delivery_hours":""}],"cuisines":[{"mastercuisineid":"143","cuisine":"American","urlname":"american"},{"mastercuisineid":"90","cuisine":"Bakery & Pastries","urlname":"bakery-pastries"},{"mastercuisineid":"57","cuisine":"French","urlname":"french"}]} 

感谢

回答

1

如果您的JSON位于服务器上,并且您通过HTTP请求访问它,则只需解析内容,而不是解析带有标头的整个文件。
尝试做一个HTTP客户端,使用getResponse.getEntity或getResponse.getContent,然后使用其中一个解析器。

1

你似乎是试图解析HTTP的JSON。 HTTP在任何JSON实体之前都有一个status line和标头。

+0

感谢Commonsware,有什么办法可以跳过状态行和标题吗? – ganesh 2010-07-29 06:50:55

+0

@ganesh:正如Sephy指出的那样,使用'HttpClient'和'BasicResponseHandler'而不是'URL'。 – CommonsWare 2010-07-29 07:02:42