objective-c - NSJSONSerialization 只获取根 key
<p><p>我在使用 NSJSONSerialization 从 PHP 服务器解析 JSON 时遇到问题。 JSLint 说我的 JSON 是有效的,但似乎只能进入一两个级别。</p>
<p>这本质上是我的 JSON 结构:</p>
<pre><code>{
"products":
[{
"product-name":
{
"product-sets":
[{
"set-3":
{
"test1":"test2",
"test3":"test4"
},
"set-4":
{
"test5":"test6",
"test7":"test8"
}
}]
},
"product-name-2":
{
"product-sets":
[{
}]
}
}]
}
</code></pre>
<p>这是我的解析代码:</p>
<pre><code>NSDictionary *json = ;
if (json) {
NSArray *products = ; // works
for (NSDictionary *pItem in products) { // works
NSLog(@"Product: %@", pItem); // works, prints the entire structure under "product-name"
NSArray *productSets = ;// gets nil
for (NSDictionary *psItem in productSets) {
// never happens
}
}
}
</code></pre>
<p>我已经为此旋转了几个小时,但在我搜索的任何地方都找不到类似的东西。是否有任何我不知道的限制,或者我只是没有看到明显的东西?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>你错过了一个嵌套对象</p>
<pre><code>NSArray *productSets = [ objectForKey:@"product-sets"];
</code></pre>
<p>我用这个 CLI 程序测试了它</p>
<pre><code>#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString *jsonString = @"{\"products\":[{\"product-name\": {\"product-sets\": {\"set-3\":{\"test1\":\"test2\", \"test3\":\"test4\"}, \"set-4\":{\"test5\":\"test6\", \"test7\":\"test8\"} }}}, {\"product-name-2\": \"2\"}]}";
// insert code here...
NSLog(@"%@", jsonString);
NSError *error;
NSDictionary *json = options:kNilOptions error:&error];
if (json) {
NSArray *products = ; // works
for (NSDictionary *pItem in products) { // works
NSLog(@"Product: %@", pItem); // works, prints the entire structure under "product-name"
NSArray *productSets = [ objectForKey:@"product-sets"];// gets nil
for (NSDictionary *psItem in productSets) {
NSLog(@"%@", psItem);
}
}
}
}
return 0;
}
</code></pre>
<hr/>
<p>请注意,您的 json 中的某些内容很奇怪:</p>
<p>对于每个展平的对象,键应该相同。包含数字或对象的键没有多大意义。如果您需要跟踪单个对象,请包含具有适当值的 id 键。 </p></p>
<p style="font-size: 20px;">关于objective-c - NSJSONSerialization 只获取根 key ,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/12095200/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/12095200/
</a>
</p>
页:
[1]