1

我只是想知道是否有人可以推荐比 org.json 更好的替代方法来解码复杂的 JSON 字符串。作为参考,这将来自网络服务器到 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 和其他一些,因为要么需要提前知道确切的结构和/或不能很好地处理嵌入类型(包含的消息)。

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

任何人都可以建议一个可以更好地处理这个问题的库/方法吗?如果其他人使用了另一种方法来处理这种复杂多变的结构,我非常感谢您的意见。

提前致谢。

4

1 回答 1

1

我真的不同意关于org.json 库的观点:“那是超级老派,在现实世界中没有人再使用那个库了”,因为使用这个库解析 json 非常简单。另外,json能复杂到什么程度呢?我的意思是,都是key/value对,没有什么是几行代码解决不了的,比如我给你讲几个案例,这样你就明白了确信这很简单:
假设您有来自服务器的响应,其中包含您需要格式化为 json 数组的所有信息,那么您可以执行以下操作来解析字符串:

JsonArray arrayJson = new JsonArray(response); 

但是现在您要访问 arrayJson 子对象:

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");
}

.....,更多的嵌套你可以用同样的方式处理它们,所以我想我确立了我的观点。请记住,有时,努力寻找更简单的做事方法会使他们更难做。

于 2013-05-18T05:40:59.523 回答