0

JSON ファイルの解析中に「Error parsing data」エラーが発生しました

次のテキストを解析すると、パーサーはこれらに対して機能するようです。

{"vid":"2",
"uid":"1",
"title":"BangsarSouth",
"log":"",
"status":"1",
"comment":"1",
"promote":"0",
"sticky":"0",
"nid":"2",
"type":"property",
"language":"und",
"created":"1369825923",
"changed":"1370534102",
"tnid":"0"

しかし、ファイルのこの部分に到達すると、壊れて解析エラーが発生します

"body":{"und":[{"value":"Some description for Bangsar South.\r\nLorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.","summary":"","format":"filtered_html","safe_value":"<p>Some description for Bangsar South.<br />\nLorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diamなど...

エラーは、ネストされた要素が原因であると思われます。誰かが私の問題の解決策を提案できますか?

以下は私のJavaコードです

try {

        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet("http://xxxxxx.com/rest/node/2.json");

        HttpResponse response = httpClient.execute(httpGet);
         HttpEntity entity = response.getEntity();
         is = entity.getContent();


    } catch (Exception e) {
        Log.e("log_tag", "Error in http connection "+e.toString());
    }

    try {           
        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
        }
        is.close();

        result=sb.toString();
        Log.e("faridi",result);


    } catch (Exception e) {
        Log.e("log_tag", "Error converting result "+e.toString());
    }


    //parse json data
    try{
            jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++){

                    JSONObject json_data = jArray.getJSONObject(i);

                }
    }catch(JSONException e){
            Log.e("log_tag", "Error parsing data "+e.toString());
    }
4

1 に答える 1

0

ジャクソンとスプリング・アーがあなたの友達になります。

Spring の RestTemplate ライブラリを使用できます。これは、すべての重い JSON 作業に jackson を使用します。

念のため、これが戻ってくる JSON 応答であるとしましょう。

{
    "message" : "Hello World",
    "answer" : "42"
}

まず、Pojo に「デシリアライズ」します。Java Jackson のデシリアライズについて少しグーグルで検索すると、準備が整います。

以前に JAXB を使用して xml をアンマーシャリングしたことがある場合は、すぐに慣れることができます。とても簡単で、Json レスポンスの Pojo コンテナを作成するだけです。

@JsonSerialize
public class JsonResponse {
    private String message;
    private int answer;
    // Getters and seters below.
}

あとは、RestTemplate で Json Rest 呼び出しを行い、JsonResponse オブジェクトを作成するだけです。

HTTP GET メソッドのみを実行しているため、これが最も簡単な方法です。

RestTemplate restTempalte = new RestTemplate();
JsonResponse jsonResponse = restTemplate.getForObject("url", JsonResponse.class);

シンプルなワンライナーであるだけでなく、単体テスト用の REST 応答を簡単にモックすることもできます。

送信に関するデータが必要な場合は、getForEntity() を使用します。

于 2013-06-18T19:35:13.593 に答える