处理 json 数据时出错:无法读取数据,因为它的格式不正确
Posted
技术标签:
【中文标题】处理 json 数据时出错:无法读取数据,因为它的格式不正确【英文标题】:error processing json data: The data couldn’t be read because it isn’t in the correct format 【发布时间】:2017-05-13 17:52:37 【问题描述】:这个错误一直烦人一上午,我正在尝试检索格式为:
song =
'artist':'Tom Waits',
'song':'New Coat Of Paint',
'lyrics':'Let\'s put a new coat of paint on this lonesome old town\nSet \'em up, we\'ll be knockin\' em [...]',
'url':'http://lyrics.wikia.com/Tom_Waits:New_Coat_Of_Paint'
来自这个网址:JSON URL
这是我用来解析数据的函数:
func parseJSONFromData(_ jsonData: Data?) -> [String : AnyObject]?
if let data = jsonData
do
let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String : AnyObject]//Parses data into a dictionary
return jsonDictionary
catch let error as NSError
print("error processing json data: \(error.localizedDescription)")
return nil
【问题讨论】:
这是无效的 JSON:字符串必须用双引号括起来,不能用等号。 那么我该如何检索这些数据呢? 我猜还有其他网站提供有效数据。 快速搜索lyrics.wikia.com json
发现了这个问题***.com/q/41183709/1187415,它使用“fmt=realjson”
@MartinR 谢谢!,做到了
【参考方案1】:
如果您访问网站http://json.parser.online.fr,它会让您粘贴数据并检查它是否是有效的 JSON。你的不是。
正如其他人所说,字符串需要用双引号括起来,而不是单引号,并且“=”无效。
编写将所有出现的'
替换为"
的代码非常容易。 song =
位不太清楚。 JSON 的正确格式是:
"song":
"artist":"Tom Waits",
"song":"New Coat Of Paint",
"lyrics":"Let\"s put a new coat of paint on this lonesome old town\nSet \"em up, we\"ll be knockin\" em [...]",
"url":"http://lyrics.wikia.com/Tom_Waits:New_Coat_Of_Paint"
或者你可以完全摆脱外部字典:
"artist":"Tom Waits",
"song":"New Coat Of Paint",
"lyrics":"Let\"s put a new coat of paint on this lonesome old town\nSet \"em up, we\"ll be knockin\" em [...]",
"url":"http://lyrics.wikia.com/Tom_Waits:New_Coat_Of_Paint"
您需要查看您的数据并找出在一般情况下它有什么问题,导致 JSON 不合法。
编辑:
进一步挖掘后,您使用的 URL 似乎返回的是 javascript,而不是 JSON。试试这样的 URL:
http://lyrics.wikia.com/wikia.php?controller=LyricsApi&method=getSong&artist=Tom%20Waits&song=new%20coat%20of%20paint
这应该会以格式良好的 JSON 为您提供 Tom Waits 歌曲 New Coat of Paint 的歌词。
此 Github 页面提供有关搜索参数的信息,您可以使用它来查询该站点并获取歌词:
https://github.com/Wikia/app/blob/dev/extensions/wikia/LyricsApi/LyricsApiController.class.php#L10-L15
【讨论】:
您可能不想将字符串中的\'
替换为\"
。
是的。如果字符串包含单引号,它会变得更加复杂。请参阅我的答案的编辑。我提供了一个返回格式正确的 JSON 的 URL。以上是关于处理 json 数据时出错:无法读取数据,因为它的格式不正确的主要内容,如果未能解决你的问题,请参考以下文章