0

在 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

4 回答 4

4

这不是一个有效的 JSON 文件。

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

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

阅读http://json.org/了解 JSON 语法。

于 2012-07-18T12:51:57.503 回答
1
JSONObject header =  new JSONObject("header");

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

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

但从你的评论来看

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

您打算将“标头”作为一个数组(不是对象),但数据将它作为一个字符串(看起来像一个数组),因此您可能需要修复 JSON 以及 Java 代码。

于 2012-07-18T12:53:18.570 回答
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")where XXX can be StringJSONObject或者JSONArray更多。

于 2012-07-18T13:09:09.993 回答
0

JSONObject header = new JSONObject("header");

您不是要从中获取标头json,而不是创建新标头JSONObject吗?

如在

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

于 2012-07-18T12:52:04.540 回答