您询问了关于消除“括号集”的问题,但鉴于底层结构是一系列嵌套集合(字典和数组),您可以通过从该结构中有效地折叠一两个级别来达到预期的效果。您可以使用KVC 集合操作符,@unionOfArrays
与valueForKeyPath
. 如果你真的想做一个字符串操作,我们可以这样做,但是编写呈现一个简单数组的代码似乎更合乎逻辑,然后你可以使用componentsJoinedByString
如果你真的想要一个简单的字符串结尾。
NSLog
使这个答案有点复杂的是,报告的 JSON 与结果的不匹配NSDictionary
,所以我不清楚输入的确切内容。因此,我将展示此 KVC 集合运算符的两种排列方式,一种与提供的示例 JSON 匹配,另一种与我从NSDictionary
您报告的结构中推断出的 JSON 匹配。
如果 JSON 是:
{"parameters":[{"parameter_value":["Smith"]}, {"parameter_value":[66211]}]}
然后您可以按如下方式解析它(我使用的是NSJSONReadingMutableContainers
这样我可以更改结果;如果您不尝试更改数组,而只是提取适当的结果,那么您不需要使其可变; 由你决定):
NSMutableDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:&error];
这将产生一个NSMutableDictionary
结构是:
{
parameters = (
{
"parameter_value" = (
Smith
);
},
{
"parameter_value" = (
66211
);
}
);
}
但是您可以替换parameters
为:
dictionary[@"parameters"] = [dictionary[@"parameters"] valueForKeyPath:@"@unionOfArrays.parameter_value"];
产量:
{
parameters = (
Smith,
66211
);
}
但是,如果你有 JSON 像:
{"parameters":[["Smith"],[66211]]}
如果你用与NSJSONSerialization
上面相同的方法解析它,那将产生一个字典,如:
{
parameters = (
(
Smith
),
(
66211
)
);
}
您可以再次使用 KVC 集合运算符替换参数值@unionOfArrays
,这次使用self
:
dictionary[@"parameters"] = [dictionary[@"parameters"] valueForKeyPath:@"@unionOfArrays.self"];
这将产生:
{
parameters = (
Smith,
66211
);
}
您问:
我究竟如何摆脱括号所以我剩下的是史密斯,66211
如果您从字面上看只是想要@"Smith, 66211"
,那么您可以只使用这个简化的数组,然后使用componentsJoinedByString
:
NSString *string = [dictionary[@"parameters"] componentsJoinedByString:@", "];