Java 无法读取所有JSON属性

Java 无法读取所有JSON属性,java,json,Java,Json,我有以下json jsonobject。我可以阅读一些但不是所有的属性。如果我打印JSONObj,我会得到: JSONObj: { "@priority":"50", "flags":{ "scheduleStatus":"DURING" }, "@startDate":"2013-10-15T12:30:57.493Z", "description":"UserReconcile", "@distributionStrategy":"OFFER"

我有以下json jsonobject。我可以阅读一些但不是所有的属性。如果我打印JSONObj,我会得到: JSONObj:

{
   "@priority":"50",
   "flags":{
      "scheduleStatus":"DURING"
   },
   "@startDate":"2013-10-15T12:30:57.493Z",
   "description":"UserReconcile",
   "@distributionStrategy":"OFFER",
   "name":"UserReconcile",
   "itemContext":{
      "appName":"MyProcess",
      "appInstance":"pvm:0a12iq",
      "activityName":"UserReconcile",
      "appID":"_-hYCETV8EeOr4-yR8gXd7g",
      "activityID":"pvm:001im4"
   }
}
我能够获得@priority、description和其他一些值。我无法获取最后一个键“activityID”

我的代码得到的值为ok:

priority=jsonObj.getString("@priority");
startDate =jsonObj.getString("@startDate");
workDesc=jsonObj.getString("description");
但这失败了:

amxref = jsonObj.getString("activityID");

以下是JSON的扩展视图:

{
    "@priority": "50",
    "flags": {
        "scheduleStatus": "DURING"
    },
    "@startDate": "2013-10-15T12:30:57.493Z",
    "description": "UserReconcile",
    "@distributionStrategy": "OFFER",
    "name": "UserReconcile",
    "itemContext": {
        "appName": "MyProcess",
        "appInstance": "pvm:0a12iq",
        "activityName": "UserReconcile",
        "appID": "_-hYCETV8EeOr4-yR8gXd7g",
        "activityID": "pvm:001im4"
    }
}
你能发现问题吗

activityID
不是
jsonObj
对象的键

你应该做:

JSONObject itemContext = jsonObj.getJSONObject("itemContext");
String activityID = itemContext.getString("activityID");
这是格式化的JSON响应, 你得到的是价值观

priority=jsonObj.getString("@priority");
startDate =jsonObj.getString("@startDate");
workDesc=jsonObj.getString("description");
因为它们在java对象中直接可用

但是

失败,因为它位于名为:itemContext的对象内


现在请将其转换为JSONObject,然后对其进行迭代以获得所需的元素

尝试获取itemContext和process activityIDI的值,我现在设法找到了这种方法:)。我做了jsonObj=getJSONObject(“header”).getJSONObject(“itemContext”))并将其放在json对象中,然后使用jsonObj.getString(“activityID”);这起作用了。基本上,我的问题是理解和识别json obj,并从根开始导航。记住这一点,如果你不知道你的反应是什么,那么你会得到不同的json反应。我想您可以要求根对象像messagetype一样进行标识,然后从那里进行解析?好吧,JSON是一种数据交换格式,因此双方应该事先就将要发送给对方的数据达成一致。如果数据格式不同,无论您使用的是什么技术,都会出错。谢谢您的回复,我设法解决了这个问题。你是对的。
priority=jsonObj.getString("@priority");
startDate =jsonObj.getString("@startDate");
workDesc=jsonObj.getString("description");
amxref = jsonObj.getString("activityID");