如何使用Java读取JSON数据

时间:2012-07-18 12:50:04

标签: java json

在Java中读取/解析以下JSON字符串时遇到问题。

代码:

try{
  json = new JSONObject(result);
//json now looks like this :-
// {'header': '[{"doc_no": "DN00001","stage":"P"}]','section':'[{"upper":100,"lower":1]'}
  if (json != null){
     // this line is throwing an exception!!
     JSONObject header =  new JSONObject("header");
   }catch(JSONException e){
    // Error Message
}

我也试过这个:

JSONArray  header = json.getJSONArray("header");

但仍然抛出一些例外。

我错过了什么?

4 个答案:

答案 0 :(得分:4)

这不是有效的JSON文件。

'header': '[{"doc_no": "DN00001","stage":"P"}]'

数组不能被'包围 字符串应该用"而不是'

包围

阅读有关JSON语法的http://json.org/

答案 1 :(得分:1)

JSONObject header =  new JSONObject("header");

您的意思是从现有对象中获取“标题”字段吗?

JSONObject header =  json.getJSONObject("header");

但从你的评论判断

// {'header': '[{"doc_no": "DN00001","stage":"P"}]','section':'[{"upper":100,"lower":1]'}

你打算将“header”作为一个数组(不是一个对象),但数据将它作为一个String(看起来像一个数组),所以你可能需要修复JSON和Java代码。 / p>

答案 2 :(得分:1)

这里老兄拿这个代码。如果你想从中获取JSONObject,修复你的JSON字符串

public static void main(String[] args) throws JSONException {
    String result = "{'header': '[{\"doc_no\": \"DN00001\",\"stage\":\"P\"}]','section':'[{\"upper\":100,\"lower\":1]'}";
    JSONObject json = new JSONObject(result);
    // json now looks like this :-
    //
    if (json != null) {
        String header = json.getString("header");
        System.out.println(header);
    }

}

你怎么了?几件事:

  1. 您的JSON字符串都是非法的。感谢解析器能够忍受你。它应该是

    {
      "header": [{"doc_no": "DN00001","stage":"P"}],
      "section":[{"upper":100,"lower":1]
    }
    
  2. 它不会单独解决您的问题。既然您想获得JSONObject,但是您提供了JSONArray(为什么要这样做?)。所以删除那些方括号。

  3. 仍然不高兴。你看到你正在尝试创建一个新的JSONObject做(明显)new JSONObject("header")使用字符串taht不是JSON。 9,期待它不会抛出错误?多么残忍。)另外你想要get而不是set。因此,请使用json.getXXX("header"),其中XXX可以是StringJSONObjectJSONArray等等。

答案 3 :(得分:0)

JSONObject header = new JSONObject("header");

您不是指来自json的​​强>标题,而不是创建新的JSONObject吗?

,如

JSONObject header = json.get("header");