iphone - json 解析返回的数据顺序与 json 字符串不同

标签 iphone objective-c ios json

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

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

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 个数字。

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

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

提前致谢。

最佳答案

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

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

关于iphone - json 解析返回的数据顺序与 json 字符串不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8501177/

相关文章:

ios - 在 iOS 中对属性字符串的某些部分进行点击操作

iPhone/iPad - 每个应用程序的 IP 流量统计

ios - UIView --> 不可见 View 的 UIImage?

iphone - 下载远程 PLIST iOS - 返回 Null

ios - 更改 iOS 中的第一个 ViewController

ios - 在 UIImagePickerController 中选择图像后的 MBProgressHUD

ios - 如何在后台开始录制 iOS Audio Session ?

ios - 表格 View 不删除内容

ios - 关闭和打开应用程序后核心数据约束工作错误(Swift)

ios - 如何减少UIImageView上图像显示的大小