解析 iOS 后 JSON 值变得混乱

Posted

技术标签:

【中文标题】解析 iOS 后 JSON 值变得混乱【英文标题】:JSON values getting jumbled up after parsing iOS 【发布时间】:2014-05-29 10:40:53 【问题描述】:

我收到一个 JSON 响应,并在 ios Xcode 5.1 中使用 NSJSONSerialization 对其进行序列化。我得到的 o/p 是:

(lldb) po jsons


    Res1 = (
        ADDRESS = " 131 SleakField Road ";
        ALP = " ";
        "BIRTH_DATE" = "05/09/2002";
    );
    Res2 = (
        Performance = "";
        Score = "";
    , 
        Performance = Proficient;
        Score = 221;
    , 
        Performance = "";
        Score = "";
    , 
        Performance = Proficient;
        Score = 237;
    );
    Res3 = ();
    Res4 = ();

jsons 是NSDictionary

但是当我使用下面的代码从上面的键值对中分离键时:

jsonKeys = [[NSArray alloc] init];
jsonKeys = [jsons allKeys];

我得到的 o/p 是:

(lldb) po jsonKeys

<__NSArrayI 0xb62dff0>(
    Res2,
    Res5,
    Res3,
    Res1,
    Res6,
    Res4
)

一切都乱了套。我想要从服务器获取它的方式。我怎样才能实现它?

【问题讨论】:

根据定义,JSON“对象”(NSDictionary)中的条目是无序的。你想要的太多了。 您不需要jsonKeys = [[NSArray alloc] init]。该行正在创建一个对象,该对象将被丢弃而不会被使用。 Removing jsonKeys = [[NSArray alloc] init] dint 会给输出带来任何改变。 @LeoJoseph:当然不是。它创建了一个立即被丢弃的数组。是否创建一个立即被丢弃的数组都没有区别,除非通知其他程序员预期的代码质量。 【参考方案1】:

NSDictionary 无法做到这一点。条目没有排序。

为了保持顺序,你应该使用条目列表,改变 json 的结构

【讨论】:

我按我想要的顺序在本地 NSDictionary 中获取我的值对。现在它与 JSON 或序列化无关。我只想从中得到钥匙。 [array allkeys] 函数应该做的事情。但不知何故,它不是。【参考方案2】:

我从堆栈溢出中提出的其他问题中得到了答案。

jsonsDictsKeys = [[jsons allKeys] sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];
jsonsDictsValues = [jsons objectsForKeys: jsonsDictsKeys notFoundMarker: [NSNull null]];

其中 jsonsDictsKeys 和 jsonsDictsValues 是 NSArray。

【讨论】:

以上是关于解析 iOS 后 JSON 值变得混乱的主要内容,如果未能解决你的问题,请参考以下文章

具有系统背景颜色的列表在暗模式下变得混乱

将json数据(未定义/混乱)转换为DataFrame的正确方法是啥?

IOS中Json解析的四种方法

会话数据在 Web 主机上变得混乱

MS Access 主键自动编号变得混乱

解析Web3:科技未来发展的混乱愿景