【问题标题】:Formating JSON object, From single quotation to double格式化 JSON 对象,从单引号到双引号
【发布时间】: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


【解决方案1】:

默认情况下,您不需要将用双引号括起来的字符串替换为包含单引号的相同字符串。 'Jack Jones'"Jack Jones" 之间没有区别,因为它们都是 string

在您的情况下,您正在尝试替换以下示例:

var str = '\'Jack Jones\''.replace(/'/g, '"');

console.log('\'' + str + '\'');

因此,如果您想用双引号将所有属性名称和值括起来,您可以像这样使用JSON.stringifyJSON.parse

var cast = {
    'cast_id': 16,
    'character': 'Alexander Haig',
    'credit_id': '52fe43c59251416c7501d72d',
    'gender': 2,
    'id': 6280,
    'name': 'Powers Boothe',
    'order': 2,
    'profile_path': '/3nNL6AvMAYq0BmHKM79RnRZVq3i.jpg'
};

cast = JSON.stringify(cast);
cast = JSON.parse(cast);

console.log(cast);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-21
    • 2012-04-24
    • 2011-05-08
    • 1970-01-01
    • 2018-05-19
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多