我只是想知道是否有人可以推荐比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,我知道我可以用它来解析字符串,但我想其中一个答案的回复(“那是超级老派并且没有人在现实世界中再使用该库“)让我质疑我的方法。
任何人都可以建议更好地处理这个问题的库/方法吗?如果其他人使用替代方法来处理这种类型的复杂和可变结构,我真的很感激你的意见。
提前致谢。
答案 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");
}
.....,你可以用同样的方式处理它们的更多嵌套,所以我认为我确定了我的观点。请记住,有时候,努力寻找更简单的做事方式,可能会让他们更难做到。