我正在查询并获取一个 JSON 字符串返回,为了举例子,我会发布一个示例。我正在尝试弄清楚如何浏览值数组并找到标记为默认的值。
JSON 示例:
我将JSON字符串转换回一个JSONObject对象。
当我输出
如何正确遍历content的值并找到isDefault的值?在示例JSON中,没有一个content的isDefault = true,因此它将默认为第一个对象。
似乎我只能将值作为字符串进行操作,我必须将content强制转换为JSONArray吗?
编辑:我似乎无法将mediaObject.content转换为JSONArray。 mediaObject.optJSONArray(“content”)返回null。我还尝试将其作为字符串获取,然后将其转换为JSONArray,但是没有成功。
编辑2:找到了数据问题所在,当我用gson解析json时,它会干扰最终输出的数据。
因此,我从new Gson().toJson(jsonObject);更改为jsonObject.toString()),现在我可以使用optJSONArray来定位数组。要将数据放回JSONObject中,我使用了JSONObject mediaObject = new JSONObject(mediaString);
GSON正在更改数据。
JSON 示例:
{
"id": "333706819617",
"guid": "4aCdriCG0WvfYEUkFf8_xqQEFxgwgNU8",
"title": "Test entry",
"author": "",
"description": "Desc",
"added": 1411702963000,
"content": [
{
"audioChannels": 2,
"audioSampleRate": 44100,
"bitrate": 281656,
"checksums": {
"md5": "70DF3E21131F9F02C3F0A74F3664AB73"
},
"contentType": "audio",
"duration": 43.258,
"expression": "full",
"fileSize": 1522986,
"frameRate": 0.0,
"format": "AAC",
"height": 288,
"isDefault": false,
"language": "en",
"sourceTime": 0.0,
"url": "http://example.com/dZiASoxchRyS",
"width": 352
},
{
"audioChannels": 2,
"audioSampleRate": 44100,
"bitrate": 160000,
"checksums": {
"md5": "3AC622D31B9DED37792CC7FF2F086BE6"
},
"contentType": "audio",
"duration": 43.206,
"expression": "full",
"fileSize": 866504,
"frameRate": 0.0,
"format": "MP3",
"height": 0,
"isDefault": false,
"language": "",
"sourceTime": 0.0,
"url": "http://example.com/59M_PSFgGGXE",
"width": 0
}
],
"thumbnails": [
{
"audioChannels": 0,
"audioSampleRate": 0,
"bitrate": 0,
"checksums": {
"md5": "BE8C98A07B3FE9020BFA464C42112999"
},
"contentType": "image",
"duration": 0.0,
"expression": "full",
"fileSize": 20379,
"frameRate": 0.0,
"format": "JPEG",
"height": 256,
"isDefault": true,
"language": "",
"sourceTime": 0.0,
"url": "http://img.example.com/waveform.jpg",
"width": 256
}
]
}
我将JSON字符串转换回一个JSONObject对象。
JSONObject mediaObject = new Gson().fromJson(mediaString, JSONObject.class);
String content = mediaObject.optString("content");
当我输出
content
时,它返回以下内容。{values=[{nameValuePairs={audioChannels=2.0, audioSampleRate=44100.0, bitrate=281656.0, checksums={nameValuePairs={md5=70DF3E21131F9F02C3F0A74F3664AB73}}......
如何正确遍历content的值并找到isDefault的值?在示例JSON中,没有一个content的isDefault = true,因此它将默认为第一个对象。
似乎我只能将值作为字符串进行操作,我必须将content强制转换为JSONArray吗?
编辑:我似乎无法将mediaObject.content转换为JSONArray。 mediaObject.optJSONArray(“content”)返回null。我还尝试将其作为字符串获取,然后将其转换为JSONArray,但是没有成功。
编辑2:找到了数据问题所在,当我用gson解析json时,它会干扰最终输出的数据。
因此,我从new Gson().toJson(jsonObject);更改为jsonObject.toString()),现在我可以使用optJSONArray来定位数组。要将数据放回JSONObject中,我使用了JSONObject mediaObject = new JSONObject(mediaString);
GSON正在更改数据。
content
转换为字符串并记录日志时,出现了问题,显示的是格式不正确的JSON。输出如上所示,随机键值(例如value=
)似乎会影响系统?我甚至无法定位values
,因为它是一个错误的JSON字符串。 - Bankzilla