这是简化的JSON文件,我需要从网络服务下载并在表格中解析结果!
编辑:我现在提供更精确的代码,通过在线工具进行清理和格式化:
{
"main": [
{
"id": 0, <--- float value
"type": "type0", <--- STRING value
"valueA": {
"valueA1": 1, <--- float value
"valueA2": 2, <--- float value
"valueA3": 3 <--- float value
},
"valueB": {
"valueB1": 1, <--- float value
"valueB2": 2 <--- float value
},
"valueC": [
{
"valueC1": "string0C1", <--- STRING value
"valueC2": 2, <--- float value
"valueC3": 3, <--- float value
}
]
},
通过在线工具jsonviewer.stack.hu格式化:
我需要用AFJSONRequestOperation解析它,然后我写下这段代码:
NSMutableArray *main = [JSON objectForKey:@"main"];
arrayID = [main valueForKey:@"id"];
arrayType = [main valueForKey:@"type"];
NSMutableArray *arrayValueC = [main valueForKey:@"valueC"];
NSMutableString *stringC1 = [arrayValueC valueForKey:@"valueC1"];
// I CANT USE objectForKey, XCode give an exception -[__NSArrayI objectForKey:]: unrecognized selector sent to instance
NSLog(@"id: %@",arrayID);
NSLog(@"type: %@",arrayType);
NSLog(@"string: %@",stringC1);
当我解析时,我从NSLog得到了这个结果:
id: (
0,
1,
2,
3,
4,
5,
6,
7,
8,
9
)
type: (
type0,
type1,
type2,
type3,
type4,
type5,
type6,
type7,
type8,
type9
)
string: (
(
"string0C1"
),
(
"string2C1"
),
(
"string2C1"
),
(
"string3C1"
),
(
"string4C1"
),
(
"string5C1"
),
(
"string6C1"
),
(
"string7C1"
),
(
"string8C1"
),
(
"string9C1"
)
)
你可以看到它的完美,我可以推断ID(float)和TYPE(string)的每个值,但我讨厌valueC1字符串的每个对象中的圆括号:如何在没有括号的情况下得到干净的valueC1和引号?如果你能提供一些代码请。谢谢!
答案 0 :(得分:3)
请勿使用valueForKey:
。请改用objectForKey:
。这可能是主要问题。但是一旦你使用它,你可能会遇到新的问题:
以下内容包含第一次访问arrayValueA
时会出现的问题:
NSMutableArray *arrayValueA = [arrayMain objectForKey:@"valueA"];
存储在valueA
的元素是一个对象,即字典,而不是数组。
最后,您的简化 JSON无论如何都是无效的。有几个值缺少双引号,例如:
"id": id0
应该是:
"id": "id0"
您最好显示真实的JSON数据和真实代码。
<强>更新强>
您应该能够使用以下代码访问JSON数据:
NSArray *main = [JSON objectForKey:@"main"];
NSDictionary* main0 = [main objectAtIndex:0];
arrayID = [main0 objectForKey:@"id"];
arrayType = [main0 objectForKey:@"type"];
NSArray *arrayValueC = [main objectForKey:@"valueC"];
NSDictionary *elem0 = [arrayValueC objectAtIndex:0];
NSString *stringC1 = [arrayValueC objectForKey:@"valueC1"];
NSLog(@"id: %@",arrayID);
NSLog(@"type: %@",arrayType);
NSLog(@"string: %@",stringC1);