如何使用Java读取JSON数据
在读取/解析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");
,但仍然抛出一些例外。
我错过了什么?
这里花花公子拿这段代码。修复你的JSON字符串,如果你想从中获得JSONObject
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);
}
}
那么你怎么了?几件事:
-
您的JSON字符串是非法的。感谢解析器支持你。它应该是
{ "header": [{"doc_no": "DN00001","stage":"P"}], "section":[{"upper":100,"lower":1] }
它不会独自解决您的问题。既然你想得到
JSONObject
,但你提供了JSONArray
(你为什么这么做?)。所以删除那些方括号。还是不高兴。你看到你试图创建一个新的
JSONObject
通过做(明显)new JSONObject("header")
使用字符串taht不是JSON。 9,期待它不会抛出错误?多残忍。)另外你想get
而不是set
。所以使用json.getXXX("header")
其中XXX可以是String
,JSONObject
或JSONArray
等等。
太棒了,但如果你读我的问题,我也试图得到JSONArray(“标题”)没有运气,虽然好指针... – gath 2012-07-18 14:15:20
@gath老兄,你需要修复你的JSON字符串像# 1。如果你想要'JSONArray',跳过#2。在#3中,使用'json.getJSONArray(“header”);'。 – Nishant 2012-07-18 14:29:40
尽管每个人都给了一个指向正确方向的指针,即json字符串格式不正确,但我会选择这个答案作为其广泛的解释。谢谢大家,我的服务器(在Python中)没有正确格式化JSON,我修改了它,现在JSON中的所有键都带有双引号{“header”:[{“doc_no”:“DN00001”}]}。 – gath 2012-07-19 05:48:12
这不是有效的JSON文件。
'header': '[{"doc_no": "DN00001","stage":"P"}]'
阵列无法与'
字符串包围应"
而不是'
包围阅读http://json.org/有关JSON语法。
为什么它不是一个有效的JSON。这是一个有效的JSON,其关键'标题'和值为* string * [{“doc_no”:“DN00001”,“stage”:“P”}],这不是严格有效的,但大部分解析器都可以工作。 – Nishant 2012-07-18 12:56:32
“不严格有效”意味着它是无效的 - 一些解析器可能执行较少 – 2012-07-18 12:58:51
然后它应该用'''而不是''包围起来 – pawelzieba 2012-07-18 12:58:53
JSONObject header = new JSONObject("header");
不要你的意思是得到从json
头,而不是创建一个新的JSONObject
?
在
JSONObject header = json.get("header");
JSONObject header = new JSONObject("header");
您的意思是从现有对象中获取的 “头” 场?
JSONObject header = json.getJSONObject("header");
但是从您的评论来看
// {'header': '[{"doc_no": "DN00001","stage":"P"}]','section':'[{"upper":100,"lower":1]'}
您打算“头”是一个数组(不是对象),但数据有它作为一个字符串(看起来像一个数组)所以您可能需要修复JSON以及Java代码。
哪个例外? – hvgotcodes 2012-07-18 12:51:12
我想你需要从变量'json'中获得'header'字段。创建新的JSONObject看起来很奇怪。 – nhahtdh 2012-07-18 12:52:55