如何从 swift 中的 jsonObject 中删除“(”?
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并拆分的唯一方法吗?希望有更好的办法
不要使用字符串操作来删除括号!首先获取正确的字符串。
问题是您的 JSON 中的 results
包含多个结果的数组:
"results": [ ... ]
当valueForKeyPath
遇到一个数组时,它将其余的关键路径(在你的例子中,definition
)应用到数组中的每个项目 ,以及 returns 另一个包含所有结果的数组 。
当您将数组转换为字符串时,您会在数组中的项目周围得到 (
)
。 (以及字符串周围的引号和每个项目之间的逗号。您可能也不想要这些。)
因此,如果您的 JSON 有多个结果,例如:
"results": [
{
"definition": "first definition",
},
{
"definition": "second definition",
}
],
标签中的文字为:
(
"first definition",
"second definition"
)
要解决此问题,请仅提取 results
数组中您真正需要的单个项目。不幸的是,您不能使用 valueForKeyPath
执行此操作(请参阅 this answer)。无论如何,你最好在每个级别检查 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
}
有一个字典,通过以下代码格式化为 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并拆分的唯一方法吗?希望有更好的办法
不要使用字符串操作来删除括号!首先获取正确的字符串。
问题是您的 JSON 中的 results
包含多个结果的数组:
"results": [ ... ]
当valueForKeyPath
遇到一个数组时,它将其余的关键路径(在你的例子中,definition
)应用到数组中的每个项目 ,以及 returns 另一个包含所有结果的数组 。
当您将数组转换为字符串时,您会在数组中的项目周围得到 (
)
。 (以及字符串周围的引号和每个项目之间的逗号。您可能也不想要这些。)
因此,如果您的 JSON 有多个结果,例如:
"results": [
{
"definition": "first definition",
},
{
"definition": "second definition",
}
],
标签中的文字为:
(
"first definition",
"second definition"
)
要解决此问题,请仅提取 results
数组中您真正需要的单个项目。不幸的是,您不能使用 valueForKeyPath
执行此操作(请参阅 this answer)。无论如何,你最好在每个级别检查 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
}