如何从 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
}