[英]How to remove “(” from a jsonObject in swift?
有一个字典,其字典通过以下代码格式化为JSONObject:
json = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions())
as! NSDictionary
数据
{
"word": "detrimental",
"results": [
{
"definition": "(sometimes followed by `to') causing harm or injury",
"partOfSpeech": "adjective",
"synonyms": [
"damaging",
"prejudicial",
"prejudicious"
],
"similarTo": [
"harmful"
],
"derivation": [
"detriment"
]
}
],
"syllables": {
"count": 4,
"list": [
"det",
"ri",
"men",
"tal"
]
},
"pronunciation": {
"all": ",dɛtrə'mɛntəl"
},
"frequency": 2.77
}
我正在尝试使用标签输出数据
label.text = "\(json.valueForKeyPath("results.definition")!)"
但是输出看起来像这样:
(
"(sometimes followed by `to') causing harm or injury"
)
我的问题是使输出仅显示不带“()”的文本的最佳方法是什么?
是将json数据转换为NSString并将其拆分的唯一方法吗? 我希望有更好的方法
不要使用字符串操作来删除括号! 首先获取正确的字符串。
问题是, results
在你的JSON包含多个结果的数组:
"results": [ ... ]
当valueForKeyPath
遇到数组时,它将其余的键路径(在您的情况下为definition
)应用于数组中的每个项目 ,并返回包含所有结果的另一个数组 。
将数组转换为字符串时,将得到(
)
包围数组中各项的内容。 (并在字符串两边加上引号,并在每一项之间使用逗号。您可能也不想使用它们。)
因此,如果您的JSON有多个结果,如下所示:
"results": [
{
"definition": "first definition",
},
{
"definition": "second definition",
}
],
标签中的文字为:
(
"first definition",
"second definition"
)
要解决此问题,请仅提取results
数组中实际需要的单个项目。 不幸的是,您不能使用valueForKeyPath
做到这一点(请参阅此答案 )。 无论如何,最好还是在每个级别上检查JSON的结构,而不要假设已经以您期望的确切格式传递了数据。
if let json = (try? NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions())) as? NSDictionary,
results = json["results"] as? NSArray,
firstResult = results.firstObject as? NSDictionary,
definition = firstResult["definition"] as? String {
label.text = definition
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.