0

嗨,我已经从 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,可以分解为上面的两行(每行作为一个字符串),但是有没有一种方法可以让我从字符串中取出数据,而无需对其进行任何操作/对其进行标记寻找a, b, c...等的值?

4

2 回答 2

2

您提供的 JSON 存在缺陷。它缺少]第二个和第三个ticket键的关闭。

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

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

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

{ "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
}

请记住,JSONException当所需的键不可用时,get* 函数会抛出,并且isNull对于值也将返回 true null

于 2013-08-11T17:20:18.567 回答
0

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

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

于 2013-08-11T11:53:18.550 回答