如何从字符串而不是 URL 解析 json 数据

Posted

技术标签:

【中文标题】如何从字符串而不是 URL 解析 json 数据【英文标题】:how to parse json data from a string instead of a URL 【发布时间】:2012-04-04 05:18:34 【问题描述】:

我想解析一个 NSString 中的 json 数据,我该怎么做呢

    NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
    NSLog(@"%@",data);
    NSArray *tempArray =[[DataController staticVersion] startParsing:data];
   for (int i = 0; i<[tempArray count]; i++) 
        id *item = [tempArray objectAtIndex:i];

        NSDictionary *dict = (NSDictionary *) item;
        SearchCode *theObject =[[SearchCode alloc] init];
        [theObject setCodeValue:[dict objectForKey:@"CodeValue"]];
        [theObject setCodeDescription:[dict objectForKey:@"CodeAddedDate"]];    
        [theObject setCodeAddedDate:[dict objectForKey:@"CodeAddedDate"]];
        [theObject setCodeID:[dict objectForKey:@"CodeID"]];
        [theObject setUpdateDateTime:[dict objectForKey:@"UpdateDateTime"]];

        [cptArray addObject:theObject];
        [theObject release];
        theObject=nil;

       

数据控制器类

@interface DataController : NSObject 


+ (id)staticVersion;
- (NSMutableArray *) startParsing:(NSString *)theURLString;
@end


#import "DataController.h"
#import "JSON.h"

@implementation DataController
DataController *theInstance;


+(id)staticVersion

    if(!theInstance)
    theInstance = [[DataController alloc] init];

return theInstance;


- (NSMutableArray *) startParsing:(NSString *)theURLString 

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",theURLString]];
NSString *fileContent= [NSString stringWithContentsOfURL:url];
SBJSON *parser = [[SBJSON alloc] init];  
NSDictionary *data = (NSDictionary *) [parser objectWithString:fileContent error:nil];  
NSArray *items = (NSArray *) data ;  
return items; 
 

 @end

【问题讨论】:

xprogress.com/… iphonedevelopertips.com/cocoa/… @Anand 我也遵循了这些方法,你可以看到我想要的代码而不是 url,数据应该从给定的字符串 var 解析 看看这个--------***.com/questions/7077007/… 我已经看到他们也提供了相同的 url 链接来获取数据并像我一样解析它 【参考方案1】:

This Post 包含解析 JSON、XML 等的类。我一直在使用这些。

【讨论】:

【参考方案2】:

在新的 sdk 中,您不必使用外部类来解析您的 JSon,您可以使用 NSJSONSerializationwitch 在 ios 5.0 及更高版本中可用。

要使用此类解析 json 字符串,您需要将 NSString 转换为 NSData,您可以这样做:

NSData *data = [stringData dataUsingEncoding:NSUTF8StringEncoding];

之后就可以使用方法将数据转成json了:

id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

你返回的类型将取决于,因为它就像你的 json,如果你的 json 是一个数组,它将是一个数组,如果是一个字典,它将是一个字典,等等。 来自苹果文档:

可以转换为 JSON 的对象必须具有以下内容 属性:

***对象是 NSArray 或 NSDictionary。所有对象都是 NSString、NSNumber、NSArray、NSDictionary 或 NSNull 的实例。全部 字典键是 NSString 的实例。数字不是 NaN 或 无穷大。

希望对你有帮助。

【讨论】:

是的,我明白了,您需要将其转换为 NSData,就像我在第一行代码中放置的那样,然后,您将这些数据转换为 NSArray 或 NSDictionary,就像我放置的那样在第二行代码中。 谢谢它给了我很大的帮助,我来自服务器的数据是字符串而不是字典或数组,所以很难访问键值,但是使用这段代码我将字符串转换为数据json 然后是字典等等。

以上是关于如何从字符串而不是 URL 解析 json 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 json(url) 解析数据并将数据发送到 url

当 Json root 不是数组而是对象时如何解析 JSON 数据,反之亦然,基于不同的 url?

objective-c json 解析器:如何解析以字符串而不是括号开头的 json 文件?

如何从android中的URL获取json数组而不是html

如何从 URL 解析带有 Windows Phone 8 中图像的 Json 数据?动态数据

使用 Powershell 解析从 Web 请求返回的 JSON 字节流而不写入文件