我以字符串的形式从twitter获得回复
我需要的是将注释的部分发送到数组,
这里是一个字符串
的例子[{"geo":null,"coordinates":null,"retweeted":false,...
"text":"@KristinaKlp saluditos y besos d colores!"},{"geo":null,"coordinates...
所以我真正需要的是“文字”之后的帖子:“=
@KristinaKlp saluditos y besos d colores!
那么,我怎样才能获取字符串并解析它,以便有希望得到数组中的所有消息?
非常感谢!
答案 0 :(得分:10)
我没有在iOS应用程序中自己进行JSON解析,但您应该能够使用像json-framework这样的库。这个库将允许您轻松地解析JSON并从字典/数组生成json(这实际上是所有JSON的组成)。
SBJson docs:
JSON以下列方式映射到Objective-C类型:
- null - > NSNull
- string - >的NSString
- 数组 - >的NSMutableArray
- 对象 - >的NSMutableDictionary
- true - > NSNumber的-numberWithBool:是
- false - > NSNumber的-numberWithBool:否
- 最多19位数的整数 - > NSNumber的-numberWithLongLong:
- 所有其他数字 - > NSDecimalNumber
由于Objective-C没有布尔值的专用类, 这些转变为NSNumber实例。但是,因为这些 使用-initWithBool:方法初始化它们往返于JSON 正常。换句话说,他们不会默默地突然变成0或1; 他们将再次表现为“真实”和“虚假”。
作为优化整数,长度最多为19位(最大长度 对于有符号的长整数)转换为NSNumber实例,而 复杂的转变为NSDecimalNumber实例。因此,我们可以避免任何 由于JSON允许可笑的大数字而失去精确度。
@page objc2json Objective-C to JSON
Objective-C类型以下列方式映射到JSON类型:
- NSNull - >空
- NSString - >串
- NSArray - >阵列
- NSDictionary - >对象
- NSNumber的-initWithBool:是 - >真
- NSNumber的-initWithBool:否 - >假
- NSNumber - >编号
@note在JSON中,对象的键必须是字符串。的NSDictionary 键不一定是,但试图转换NSDictionary 进入JSON的非字符串键会引发异常。
使用-numberWithBool:方法创建的NSNumber实例是 转换为JSON布尔“true”和“false”值,副 反之亦然。任何其他NSNumber实例都将转换为JSON编号 你会期待的方式。
<强>教程强>
有没有教程?是!这些都是由教程提供的 第三方人:
JSON Framework for iPhone - 约翰三部分的Flickr教程 Muchow。 JSON Over HTTP On The iPhone - Dan Grigsby。 AS3 to Cocoa touch:安迪雅各布斯的JSON。
您还可以查看其他图书馆,如TouchJSON,JSONKit,还有另一个JSON图书馆
答案 1 :(得分:4)
NSJSONSerialization可以很好地将您的JSON数据转换为可用的数据结构,如NSDictionary或NSArray。我推荐它,甚至更多,因为它是Cocoa公共接口的一部分,它由Apple维护。
但是,如果要将JSON的内容映射到Objective-C对象,则必须将NSDictionary / NSArray中的每个属性映射到对象属性。如果你的对象有很多属性,这可能会有点痛苦。
为了自动化该过程,我建议您使用NSObject上的Motis类别(个人项目)来完成它,因此它非常轻巧和灵活。您可以在this post中了解如何使用它。但只是为了向您展示,您只需要定义一个字典,其中包含您的JSON对象属性到NSObject子类中的Objective-C对象属性名称的映射:
- (NSDictionary*)mjz_motisMapping
{
return @{@"json_attribute_key_1" : @"class_property_name_1",
@"json_attribute_key_2" : @"class_property_name_2",
...
@"json_attribute_key_N" : @"class_property_name_N",
};
}
然后执行解析:
- (void)parseTest
{
NSData *data = jsonData; // <-- YOUR JSON data
// Converting JSON data into NSArray (your data sample is an array)
NSError *error = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
if (error)
return; // <--- If error abort.
// Iterating over raw objects and creating model instances
NSMutableArray *parsedObjects = [NSMutableArray array];
for (NSDictionary *rawObject in jsonArray)
{
// Creating an instance of your class
MyClass instance = [[MyClass alloc] init];
// Parsing and setting the values of the JSON object
[instance mjz_setValuesForKeysWithDictionary:rawObject];
[parsedObjects addObject:instance];
}
// "parseObjects" is an array with your parsed JSON.
// Do whatever you want with it here.
}
通过KeyValueCoding(KVC)设置字典中的属性,您可以在通过KVC验证设置之前验证每个属性。
答案 2 :(得分:1)
为了更好地比较iOS上JSON解析的不同库的速度,请查看The Ultimate Showdown。
答案 3 :(得分:1)
我最近不得不这样做。在查看了各种选项之后,我将JSONKit扔进了我的应用程序(我在StackOverflow上的JSON讨论中找到了它)。为什么? A)非常简单。我的意思是,它只有基本的解析/发射功能,你还需要什么? B)非常非常快。没有开销 - 只需完成工作。
我应该注意,我之前从未做过JSON - 只听说过这个词,甚至不知道如何拼写它。我在大约1小时内从零开始,到一个正在运行的应用程序。您只需向应用程序添加一个类(.h,.m),实例化它,并将解析器调用到字典对象。瞧。如果它包含一个数组,你只需获取objectForKey,将其转换为NSArray。很难比这更简单,而且速度非常快。
答案 4 :(得分:1)
-(IBAction)btn_parse_webserivce_click:(id)sender
{
// Take Webservice URL in string.
NSString *Webservice_url = self.txt_webservice_url.text;
NSLog(@"URL %@",Webservice_url);
// Create NSURL from string.
NSURL *Final_Url = [NSURL URLWithString:Webservice_url];
// Get NSData from Final_Url
NSData* data = [NSData dataWithContentsOfURL:
Final_Url];
//parse out the json data
NSError* error;
// Use NSJSONSerialization class method. which converts NSData to Foundation object.
NSDictionary* json = [NSJSONSerialization
JSONObjectWithData:data
options:kNilOptions
error:&error];
// Create Array
NSArray* Response_array = [json objectForKey:@"loans"];
NSLog(@"Array: %@", Response_array);
// Set Response_array to textview.
self.txt_webservice_response.text = [NSString stringWithFormat:@"%@"
,Response_array];
}
答案 5 :(得分:0)
NSJSONSerialization怎么样?我一直用它来解析JSON