将复杂的JSON字符串解码为各种对象

时间:2013-05-18 04:56:04

标签: android json

我只是想知道是否有人可以推荐比org.json更好的替代方法来解码复杂的JSON字符串。作为参考,这将是从Web服务器到Android(& iOS,但这是另一个开发者的问题!)设备,它不必重新启动。

该字符串属于以下性质......

{"header":"value","count":value, ..., "messages":[
    {"messagetype":1,"name":"value"},
    {"messagetype":2,"name":"value","name":value},
    {"messagetype":1,"name":"value"},
    {"messagetype":3,"name":"value","subvalues":["value",value,value]},
    ...
    {"messagetype":4,"name":value,"name":"value","name":value}
]}

基本上,有一些我可以依赖的标题字段,但是会有一个“数组”的消息,可以在计数,内容和顺序上变化。

我已经研究了几天了,并且已经解雇了GSON和其他一些因为要么提前知道确切的结构和/或不能很好地处理嵌入式类型(包含的消息)

this question中的答案三指出我使用org.json library,我知道我可以用它来解析字符串,但我想其中一个答案的回复(“那是超级老派并且没有人在现实世界中再使用该库“)让我质疑我的方法。

任何人都可以建议更好地处理这个问题的库/方法吗?如果其他人使用替代方法来处理这种类型的复杂和可变结构,我真的很感激你的意见。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我真的不同意关于org.json libray的意见:“这是超级老派,现在没有人在现实世界中使用该库了”,因为使用这个库解析json是非常简单。此外,json有多复杂?我的意思是,所有这些都是关键/值对,没有什么用几行代码无法解决的,例如我会向你说明几个案例,这样你就会得到确信这很简单:
假设您有来自服务器的响应,其中包含您需要在json数组中格式化的所有信息,那么您可以执行类似这样的操作来解析字符串:

JsonArray arrayJson = new JsonArray(response); 

但是现在你想访问arrayJson childs:

for (int i = 0; i < arrayJson.length() - 1; i++)
{
  JsonObject json = arrayJson.getJSONObject(i);
}

现在假设你在for循环中检索到的那些内部有另一个json数组: 然后你会这样得到它们:

for (int i = 0; i < arrayJson.length() - 1; i++)
{
  JsonObject json = arrayJson.getJSONObject(i);
  JSONArray anotherArray = json.getJSONArray("key");
}

.....,你可以用同样的方式处理它们的更多嵌套,所以我认为我确定了我的观点。请记住,有时候,努力寻找更简单的做事方式,可能会让他们更难做到。