从 NSURLSession 发出整个请求 UTF-8

Make Whole Request UTF-8 from NSURLSession

我正在发出一个简单的 NSURLSession GET 请求,我返回了正确的数据,我能够将它序列化到数据不再是 UTF-8 的一点,所以我无法调用子项的键.

我的数据是这样的:

[
 {
  "GeoJsonData":"{\"type\":\"Feature\",\"properties\":{},\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-119.1968536376953,35.5229358991794],[-119.19696092605591,35.52019399894053],[-119.19206857681274,35.520141605030304],[-119.19204711914062,35.52003681710729],[-119.18736934661865,35.52007174643016],[-119.18730497360228,35.52213254957543],[-119.18839931488039,35.52215001378275],[-119.18842077255249,35.522813650845336],[-119.19696092605591,35.522918435143076]]}}",
  "GeoJsonCenter":"{\"lat\":35.52148635814335,\"lng\":-119.1921329498291}"
 },
 {
  "GeoJsonData":"{\"type\":\"Feature\",\"properties\":{},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-112.42687225341795,33.49409462250672],[-112.42678642272949,33.47605511894646],[-112.42549896240234,33.47605511894646],[-112.42103576660156,33.48822503770075],[-112.41022109985352,33.49438093353938],[-112.42687225341795,33.49409462250672]]]}}",
  "GeoJsonCenter":"{\"lat\":33.48521802624292,\"lng\":-112.41854667663574}"
}
]

如您所见,那里有很多转义字符,我在这个数组中有 85 个对象,我需要迭代,一旦我找到这些对象的子对象,我就无法调用这些对象。

我的代码示例:

     NSMutableArray *geoJSONData = [[NSMutableArray alloc] init];

    for (NSDictionary *item in jsonArray){
       [geoJSONData addObject:[item objectForKey:@"GeoJsonData"]];

    }

   for (NSDictionary *item in geoJSONData) {

  NSLog(@"%@", [item objectForKey:@"coordinates"]);
                                          }

最后一个 NSLog 炸毁了控制台,因为它找不到那个键 "coordinates" 因为它被转义字符包裹着,我需要把它们拿出来。

有没有人 运行 解决这个问题,解决这个问题的最佳方法是什么,这样我就可以让我的对象完全序列化为 JSON。

非常感谢任何帮助,我刚刚从 AngularJs 回到 Objective-c,上次我与 Objective-C 一起工作时我使用了 NSUrlRequest...所以事情发生了变化。

如果您显示的数据是它的真实表示,那么您遇到了一个小问题。 key GeoJsonData 的值不是一个对象而是一个字符串。换句话说,它是一个使用 JSON.stringify() 序列化并添加到父对象的对象。相当奇怪的结构,这就是为什么我要问这是否是服务器发送的真实 JSON 表示。

在尝试访问键 coordinates 之前,您需要做的是 JSON 解析该字符串以获取有效对象,以便您可以像普通 NSDictionary 一样访问它的属性, write now 只是一个字符串。

只需使用 NSJSON序列化 class 来解码您的 GeoJsonData.