繁体   English   中英

如何快速删除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并将其拆分的唯一方法吗? 我希望有更好的方法

不要使用字符串操作来删除括号! 首先获取正确的字符串。

问题是, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM