在Java Android中解码JSON

时间:2013-08-11 11:46:22

标签: java android json

大家好,我已经用PHP编写了JSON,结果如下:

{"ticket":[
{"ticket":[{"a":"10.00","b":"1.00","c":"1.00","d":"abcde","f":"7"},
{"ticket":[{"a":"10.00","b":"1.00","c":"1.00","d":"abcde","f":"7"}
]}


    object      {1}
    ticket      [2]
            0       {6}
a   :   10.00
b   :   1.00
c   :   1.00
d   :   abcde
e   :   7

        1       {6}
a   :   10.00
b   :   1.00
c   :   1.00
d   :   abcde
e   :   7

当我在java中打开这个时,整个事情就像一个JSONObject,我分成两个JSONArray,第一个包含工作ticket,然后第二个包含

    {"ticket":[{"a":"10.00","b":"1.00","c":"1.00","d":"abcde","f":"7"},
    {"ticket":[{"a":"10.00","b":"1.00","c":"1.00","d":"abcde","f":"7"}

你期望的第二个JSONArray的长度为2,可以分解为上面的两行(每个作为一个字符串)但是有一种方法我可以从字符串中获取数据而不做它上面的东西/标记它寻找abc ...等的值?

2 个答案:

答案 0 :(得分:2)

您提供的JSON存在缺陷。它错过了第二个和第三个]键上的结束ticket

此外,如果可能,您应该更改名称,当您在JSON对象中搜索错误时,3 ticket个键非常混乱。 基于此,我不确定你的JSON应该是什么样子。

您应该使用提供的JSONObject函数来访问这些值。它们易于使用,您无需创建中间变量。

假设您的JSON看起来像这样,并存储在名为json的JSONObject变量中:

{ "tickets":
  [
    { "tickets2": [{"a": 1, "b": 2, ...}] },
    { "tickets3": [{"a": 3, "b": 4, ...}] }
  ]
}

可以访问这样的值:

json.getJSONArray("tickets").getJSONArray("tickets2").getInt("a");  // = 1

如果您只想检查值是否可用,请使用isNull功能。

if (json.getJSONArray("tickets").getJSONArray("tickets2").isNull("a")) {
  //a is not available
}

请注意,当所需的密钥不可用时,get *函数会抛出JSONException,而isNull也会返回true,但值为null

答案 1 :(得分:0)

尝试GSON库,它可以将JSON字符串转换为等效的Java对象。

https://sites.google.com/site/gson/gson-user-guide