【发布时间】:2020-05-26 09:36:33
【问题描述】:
我正在使用给我的数据集,我正在尝试解析(使用节点)返回给我的 JSON 对象,
原来它们都使用单引号,根据我的研究 JSON 使用双引号。
我返回的 JSON 对象示例!
{
'cast_id': 16,
'character': 'Alexander Haig',
'credit_id': '52fe43c59251416c7501d72d',
'gender': 2,
'id': 6280,
'name': 'Powers Boothe',
'order': 2,
'profile_path': '/3nNL6AvMAYq0BmHKM79RnRZVq3i.jpg'
},
我一直在使用str.replace() 在JSON.parse() 之前对对象进行分类,这很好,直到我找到了这样的对象
{
'cast_id': 26,
'character': '"Jack Jones"',
'credit_id': '52fe43c59251416c7501d751',
'gender': 2,
'id': 6840,
'name': 'Larry Hagman',
'order': 16,
'profile_path': '/40PVsGp5Wp5kbUhAefLHqjqbarc.jpg'
},
注意'character': '"Jack Jones"', 这给我带来了各种问题!
我有一个库可以帮助我解析这一切吗?
我错过了什么吗?
仅供参考:
我无法访问每条记录,因为 JSON 对象不是单独存储的,而是作为包含多达 60 个 JSON 对象的长字符串。
我目前有一个帮助解析数据的函数:
function formatJSON(cast) {
cast = cast.replace(/(\w) "(\w)/g, "$1 *$2");
cast = cast.replace(/(\w)" /g, "$1* ");
cast = cast.replace(/': '/g, '": "');
cast = cast.replace(/', '/g, '", "' );
cast = cast.replace(/'},/g, '"},');
cast = cast.replace(/': /g, '": ');
cast = cast.replace(/, '/g, ', "');
cast = cast.replace(/{'/g, '{"');
cast = cast.replace(/: None}/g, ': "None"}');
cast = cast.replace(/'}/g, '"}');
return cast;
}
更新
据报道,数据在 python 中使用ast.literal_eval()很好地提取为字典
【问题讨论】:
-
我不确定如果我跟随,我对 JS 还是有点陌生,但是,我知道我对函数的可怕看法以及它不应该存在的事实。
-
你不能要求真正的 JSON 吗?发明他们自己的格式的人通常会像
'"Jack'O Jones' ("Fighter"), the second"'这样在没有任何转义的情况下弄错...... -
这些数据是从哪里来的?看起来它打算使用 Python 的
ast.literal_eval()解析,而不是 JSON。你确定不能让他们提供有效的 JSON 吗? -
因为他们使用的是自定义格式,所以问问他们你应该如何解析它。也许他们有图书馆。
-
@Barmar 数据集是这个kaggle.com/rounakbanik/the-movies-dataset
标签: javascript node.js json replace