1

Androidアプリケーションでgsonを使用してjsonオブジェクトを解析しようとしていますが、実際のデバイスを使用している間、テストはエミュレーターで非常に正常に合格しましたが、問題が発生しました次のように例外が発生しています

.....: com.google.gson.JsonParseException: Failed parsing JSON source: java.io.BufferedReader@44848f38 to Json
......: print stack Failed parsing JSON source: java.io.BufferedReader@44848f38 to Json
.......:com.google.gson.JsonParseException: Failed parsing JSON source: java.io.BufferedReader@44848f38 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"}]}

ありがとう

4

2 に答える 2

1

HTTP を JSON として解析しようとしているようです。HTTPには、JSON エンティティの前にステータス行とヘッダーがあります。

于 2010-07-29T06:40:23.167 に答える
1

JSON がサーバー上にあり、HTTP 要求を介してアクセスする場合、ヘッダーを含むファイル全体ではなく、コンテンツのみを解析する必要があります。
HTTP クライアントを実行してみてください。getResponse.getEntity または getResponse.getContent を使用してから、これらのいずれかでパーサーを使用してください。

于 2010-07-29T06:50:12.623 に答える