如何用Java读取JSON数据
我在Java中读取/解析以下JSON字符串时遇到问题 代码: 我也试过:如何用Java读取JSON数据,java,json,Java,Json,我在Java中读取/解析以下JSON字符串时遇到问题 代码: 我也试过: JSONArray header = json.getJSONArray("header"); 但是仍然抛出一些异常 我缺少什么?这不是有效的JSON文件 'header': '[{"doc_no": "DN00001","stage":"P"}]' 数组不能被包围。 字符串应该用“而不是” 阅读JSON语法。这不是有效的JSON文件 'header': '[{"doc_no": "DN00001","stage":
JSONArray header = json.getJSONArray("header");
但是仍然抛出一些异常
我缺少什么?这不是有效的JSON文件
'header': '[{"doc_no": "DN00001","stage":"P"}]'
数组不能被包围。
字符串应该用
“
而不是”
阅读JSON语法。这不是有效的JSON文件
'header': '[{"doc_no": "DN00001","stage":"P"}]'
数组不能被包围。
字符串应该用
“
而不是”
阅读JSON语法。
JSONObject header=newJSONObject(“header”)代码>
您的意思是从json
获取标题,而不是创建新的JSONObject
如
jsonobjectheader=json.get(“header”)代码>JSONObject头=新的JSONObject(“头”)代码>
您的意思是从json
获取标题,而不是创建新的JSONObject
如
jsonobjectheader=json.get(“header”)代码>
您的意思是从现有对象获取“header”字段吗
JSONObject header = json.getJSONObject("header");
但是从你的评论来看
// {'header': '[{"doc_no": "DN00001","stage":"P"}]','section':'[{"upper":100,"lower":1]'}
您希望“header”是一个数组(而不是一个对象),但数据将其作为一个字符串(看起来像一个数组),因此您可能需要修复JSON和Java代码
您的意思是从现有对象获取“header”字段吗
JSONObject header = json.getJSONObject("header");
但是从你的评论来看
// {'header': '[{"doc_no": "DN00001","stage":"P"}]','section':'[{"upper":100,"lower":1]'}
您希望“header”是一个数组(而不是一个对象),但数据将其作为一个字符串(看起来像一个数组),因此您可能需要修复JSON和Java代码。这里,请看这段代码。如果您想从JSONObject中获取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);
}
}
你怎么了?两件事:
您的JSON字符串都是非法的。多亏了语法分析人员的支持。应该是
{
"header": [{"doc_no": "DN00001","stage":"P"}],
"section":[{"upper":100,"lower":1]
}
它不能单独解决你的问题。因为您想要获取JSONObject
,但是您提供了一个JSONArray
(为什么这样做?)。所以去掉那些方括号
还是不开心。您可以看到,您正试图创建一个新的JSONObject
,方法是(显然)newjsonobject(“header”)
使用字符串taht,而不是JSON。9并期望它不会抛出错误?多残忍啊。)另外,你想获取
而不是设置
。因此,请使用json.getXXX(“header”)
,其中XXX可以是String
、JSONObject
或JSONArray
等等
伙计,拿着这个密码。如果您想从JSONObject中获取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);
}
}
你怎么了?两件事:
您的JSON字符串都是非法的。多亏了语法分析人员的支持。应该是
{
"header": [{"doc_no": "DN00001","stage":"P"}],
"section":[{"upper":100,"lower":1]
}
它不能单独解决你的问题。因为您想要获取JSONObject
,但是您提供了一个JSONArray
(为什么这样做?)。所以去掉那些方括号
还是不开心。您可以看到,您正试图创建一个新的JSONObject
,方法是(显然)newjsonobject(“header”)
使用字符串taht,而不是JSON。9并期望它不会抛出错误?多残忍啊。)另外,你想获取
而不是设置
。因此,请使用json.getXXX(“header”)
,其中XXX可以是String
、JSONObject
或JSONArray
等等
我认为您需要从变量json
中获取标题
字段。创建新的JSONObject看起来很奇怪。我认为您需要从变量json
获取header
字段。创建新的JSONObject看起来很奇怪。为什么它不是有效的JSON。它是一个有效的JSON,键为'header',值为字符串[{“doc_no”:“DN00001”,“stage”:“P”}],它不是严格有效的,但大多数解析器都可以工作。“不严格有效”意味着它无效-一些解析器的强制程度可能较低,因此应该用“
而不是”
@TS——我不会走向完美。。。发布的代码是错误的。这个答案并没有说明JSONObject(“header”)
试图从字符串“header”创建JSON
对象这一事实。您可以用JSONObject解析单引号的JSON字符串。@Nishant gath写道,他尝试了JSON.getJSONArray(“header”)
,在这种情况下应该可以使用。为什么它不是有效的JSON。它是一个有效的JSON,键为'header',值为字符串[{“doc_no”:“DN00001”,“stage”:“P”}],它不是严格有效的,但大多数解析器都可以工作。“不严格有效”意味着它无效-一些解析器的强制程度可能较低,因此应该用“
而不是”
@TS——我不会走向完美。。。发布的代码是错误的。这个答案并没有说明JSONObject(“header”)
试图从字符串“header”创建JSON
对象这一事实。您可以用JSONObject解析单引号的JSON字符串。@Nishant gath写道,他尝试了JSON.getJSONArray(“header”)
,在本例中应该可以使用。太好了!,但是如果你读了我的问题,我也尝试了获取JSONArray(“header”),但运气不好,这是一个好的指针…@gath dude,你需要像#1一样修复你的JSON字符串。如果想要JSONArray
,请跳过#2。在#3中,使用json.getJSONArray(“header”)代码>。虽然每个人都给出了一个指向正确方向的指针,即json字符串的格式不正确,但我将选择这个答案进行详细解释。谢谢大家,我的服务器(python)没有正确格式化json,我已经修改了它,现在json中的所有键都有双引号{“header”:[{“doc_no”:“DN00001”}}。太好了!,但是如果你读了我的问题,我也尝试了获取JSONArray(“header”),但运气不好,这是一个好的指针…@gath dude,你需要像#1一样修复你的JSON字符串。如果您想