从 json 解析返回的数据排序与 json 字符串不同

Posted

技术标签:

【中文标题】从 json 解析返回的数据排序与 json 字符串不同【英文标题】:Ordering of data returning from json parsing not same as json string 【发布时间】:2011-12-14 08:08:21 【问题描述】:

我在我的应用程序中使用 JSON 解析。 我的问题是,当我从服务器获取响应字符串时,我通过 JSON Parser 和字典中的数据解析了该字符串。解析很顺利,但是顺序没有得到维护,这意味着当我的字符串出现时,它首先具有“学习中文”的值,但是当解析它并将数据输入字典时,它没有出现在第一个元素上。

我想用我的示例代码来解释这一点: 我要解析的字符串:

NSString *respStr = [req responseString];
NSLog(@"respStr=%@",respStr);



  "Learning Chinese": [
    
      "title": "Chinese nga28Traditionalnga27 Audio FlashCards for iPad",
      "function_name": "Learning Chinese"
    ,
    
      "title": "WCC Chinese Flashcards nga28Bigramnga27 with Audio",
      "function_name": "Learning Chinese"
    
  ],
  "Business & Office": [
    
      "title": "Instant Customer",
      "function_name": "Business & Office"
    ,
    
      "title": "Phone Swipe nga7 Credit Card Terminal",
      "function_name": "Business & Office"
    
  ],
  "Kids": [
    
      "title": "iWriteWords nga28Handwriting Gamenga27",
      "function_name": "Kids"
    ,
    
      "title": "SoundBook nga25 audio flashcards for toddlers",
      "function_name": "Kids"
    
  ],
  "Christmas": [
    
      "title": "Santanga2s Fun",
      "function_name": "Christmas"
    ,
    
      "title": "Santerrific",
      "function_name": "Christmas"
    
  ]

现在

NSMutableDictionary *dict=[respStr JSONValue];
NSLog(@"dict=%@",dict);

我明白了:

dict=
    "Business & Office" =     (
                
            "function_name" = "Business & Office";
            title = "Instant Customer";
        ,
                
            "function_name" = "Business & Office";
            title = "Phone Swipe nga7 Credit Card Terminal";
        
    );
    Christmas =     (
                
            "function_name" = Christmas;
            title = "Santanga2s Fun";
        ,
                
            "function_name" = Christmas;
            title = Santerrific;
        
    );
    Kids =     (
                
            "function_name" = Kids;
            title = "iWriteWords nga28Handwriting Gamenga27";
        ,
                
            "function_name" = Kids;
            title = "SoundBook nga25 audio flashcards for toddlers";
        
    );
    "Learning Chinese" =     (
                
            "function_name" = "Learning Chinese";
            title = "Chinese nga28Traditionalnga27 Audio FlashCards for iPad";
        ,
                
            "function_name" = "Learning Chinese";
            title = "WCC Chinese Flashcards nga28Bigramnga27 with Audio";
        
    );

之后:

NSLog(@"[dict allKeys]=%@",[dict allKeys]);

[dict allKeys]=(
    Christmas,
    Kids,
    "Learning Chinese",
    "Business & Office"
)

从代码中可以清楚地看出,Learning Chinese 在字符串中是第一个,但在字典中它是 4 个数字,而在执行 allKeys 时它是 3 个数字。

如果有人知道为什么会发生这种情况,请告诉我或任何其他解决方法。排序对我来说是必要的。我必须以与从服务器返回的字符串相同的顺序显示我的数据。

任何建议都将受到高度赞赏。

提前致谢。

【问题讨论】:

在我看来,您返回的数据是按字母顺序列出的。 Objective-C SBJSON: order of json array 的可能重复项 【参考方案1】:

你必须知道 NSDictionary/NSMutableDictionary 中的键是没有顺序的。要解决这个问题,您可以使用数组或在代码中自行排序。

您的问题与这个问题非常相似: Objective-C SBJSON: order of json array

【讨论】:

感谢 Rafal 的回答+1。是的,我也看到了你提到的那个问题,但它并没有解决我的问题。

以上是关于从 json 解析返回的数据排序与 json 字符串不同的主要内容,如果未能解决你的问题,请参考以下文章

求一个数据库函数解析json 如下图要求

解析从 c# 返回的 json 字符串数组

解决ajax请求返回Json无法解析""字符的问题

js解析与序列化json数据(一)json.stringify()的基本用法

快速解析从 API 以 JSON 形式返回的对象

如何在ajax返回时解析字符串的JSON列表?