我正在使用RESTKit为JSON做一些对象映射,我正在映射一个数组。我映射的JSON看起来像这样:"parameters":[{"parameter_value":["Smith"]}, {"parameter_value":[66211]}]
我得到的数组看起来像这样:
Parameter Value: (
(
Smith
),
(
66211
)
)
当我尝试通过以下代码将数组转换为字符串时:NSString *nameidvalue = [[parameterValueArray valueForKey:@"description"] componentsJoinedByString:@""];
字符串nameidvalue变为:
(
Smith
)(
66211
)
我究竟如何摆脱括号所以我留下的是史密斯,66211
答案 0 :(得分:2)
您询问是否要删除“括号集”,但鉴于底层结构是一系列嵌套集合(字典和数组),您可以通过有效地从该结构中折叠一个或两个级别来实现所需的效果。您可以使用与KVC collection operator结合使用的valueForKeyPath
@unionOfArrays
来执行此操作。如果你真的想要进行字符串操作,我们可以这样做,但编写呈现简单数组的代码似乎更合乎逻辑,如果你真的想要一个简单的字符串,你可以使用componentsJoinedByString
。
这个答案有点复杂的原因是报告的JSON与结果NSLog
的{{1}}不匹配,所以我不确定输入是什么。所以我将展示这个KVC集合运算符的两个排列,一个匹配提供的样本JSON,另一个匹配我从您报告的NSDictionary
结构推断出的JSON。
如果JSON是:
NSDictionary
然后您可以解析如下(我正在使用{"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"];
但是,如果你有像JSON那样:
{
parameters = (
Smith,
66211
);
}
如果你使用与上面相同的{"parameters":[["Smith"],[66211]]}
解析它,那将产生如下字典:
NSJSONSerialization
您可以再次使用KVC集合运算符{
parameters = (
(
Smith
),
(
66211
)
);
}
替换参数值,这次使用@unionOfArrays
:
self
那会产生:
dictionary[@"parameters"] = [dictionary[@"parameters"] valueForKeyPath:@"@unionOfArrays.self"];
你问:
我究竟如何摆脱括号所以我留下的是史密斯,66211
如果您真的只想要{
parameters = (
Smith,
66211
);
}
,那么您可以使用此简化数组,现在使用@"Smith, 66211"
:
componentsJoinedByString
答案 1 :(得分:0)
尝试..访问参数值的 Objectforkey 并存储到dicitonary中,然后访问Smith的objectforkey并将值存储到字符串中。
NSError *e = nil;
NSMutableArray *JSON = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &e];
NSDictionary *value = [JSON objectforkey:@"parameter_value"];
您将获得预期值。
答案 2 :(得分:0)
尝试
NSString *nameidvalue = [[parameterValueArray valueForKey:@"parameters"] componentsJoinedByString:@""];
答案 3 :(得分:0)
替换为,
NSString *nameidvalue = [[parameterValueArray valueForKey:@"description"] componentsJoinedByString:@","];