解析 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 值变得混乱的主要内容,如果未能解决你的问题,请参考以下文章