从 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
.
我正在发出一个简单的 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
.