1

我正在使用 RESTKit 为 JSON 做一些对象映射,我正在映射一个数组。我正在映射的 JSON 如下所示:"parameters":[{"parameter_value":["Smith"]}, {"parameter_value":[66211]}]

我得到的数组如下所示:

Parameter Value: (
        (
        Smith
    ),
        (
        66211
    )
)

当我尝试通过此代码将数组转换为字符串时:NSString *nameidvalue = [[parameterValueArray valueForKey:@"description"] componentsJoinedByString:@""];字符串 nameidvalue 变为:

 (
    Smith
)(
    66211
)

我究竟如何摆脱括号所以我剩下的是史密斯,66211

4

4 回答 4

2

您询问了关于消除“括号集”的问题,但鉴于底层结构是一系列嵌套集合(字典和数组),您可以通过从该结构中有效地折叠一两个级别来达到预期的效果。您可以使用KVC 集合操作符,@unionOfArraysvalueForKeyPath. 如果你真的想做一个字符串操作,我们可以这样做,但是编写呈现一个简单数组的代码似乎更合乎逻辑,然后你可以使用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:@", "];
于 2013-08-26T05:29:38.173 回答
0

试试 like.. 访问Parameter Value 的Objectforkey并存储到字典中,然后访问 Smith 的 objectforkey 并将值存储到字符串中。

NSError *e = nil;
NSMutableArray *JSON = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &e];  
NSDictionary *value = [JSON objectforkey:@"parameter_value"];

您将获得预期值。

于 2013-08-26T04:45:23.307 回答
0

用。。。来代替,

 NSString *nameidvalue = [[parameterValueArray valueForKey:@"description"] componentsJoinedByString:@","];
于 2013-08-26T06:18:54.880 回答
0

尝试

NSString *nameidvalue = [[parameterValueArray valueForKey:@"parameters"] componentsJoinedByString:@""];
于 2013-08-26T04:47:10.127 回答