0

解析 JSON 文件时遇到“解析数据错误”错误

解析以下文本时,解析器似乎适用于这些:

{"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 diamETC ...

我怀疑错误是由于嵌套元素造成的。有人可以为我的问题提出解决方案吗?

下面是我的javacode

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 库,它使用 jackson 来完成所有繁重的 JSON 工作。

为了理智,假设这是返回的 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 回答