【问题标题】:How to convert JSON object to a different format [duplicate]如何将 JSON 对象转换为不同的格式 [重复]
【发布时间】:2019-03-27 04:06:44
【问题描述】:

我有一个这样的 JSON 对象

{
    "name": "Test Name",
    "age": 24
}

有没有办法可以将其转换为 String,格式类似于

{
    name: "Test Name",
    age: 24
}

JSON 将具有不同的长度和不同的属性。

现在,我正在这样做,如下所示。对于更大和更复杂的 JSON 对象,这可能会变得太长和混乱。我需要知道是否有更简单、更清洁的解决方案。

let cypherQueryObject = '{';
cypherQueryObject += ` name: "${user.name}";
if (user.age) { cypherQueryObject += `, age: "${user.age}"` };
cypherQueryObject = '}';

【问题讨论】:

  • 基本上,您要删除包裹键的引号?
  • 可以用正则表达式作为字符串操作(见JSON regex from other answer
  • @RobbyCornelissen 这里的代码试图提供一个我现在如何处理它的例子。在我的真实代码中,大多数这样的事情都已经处理好了,比如布尔值、数字、其他 JSON 或数组。
  • 使用 AST 解析器进行解析,然后使用与真实 JSON 略有不同的语法重新组装。 Popular parser
  • 对我的回答造成的混乱表示歉意,显然我没有深入阅读这个问题。经过一些快速的谷歌搜索,我相信它可能与JSON.stringify without quotes on properties? 重复

标签: javascript json ecmascript-6 neo4j


【解决方案1】:

您正在寻找的解决方案与人们所期望的略有不同。 JavaScript 的 JSON.stringify() 生成 JSON 字符串,并且有效的 JSON 在键周围包含 "(仅限双引号)。

在您的情况下,您尝试使用没有 " 围绕键的 JSON 字符串。所以这里有一个简单的过程来做到这一点。在这里,我假设您将在简单的JSON 字符串中使用它,其中任何键的值部分都没有key: 之类的东西,那么它也可以在更大的JSONs 中正常工作。

如果不是这样,那么您将需要以更有效的形式改进查找和替换实用程序。正则表达式非常适合这项工作。

这里我尝试过这样解决你的问题。

我使用NODE REPL执行语句,所以请忽略默认返回的undefined

> 
> let o = {
...     "name": "Test Name",
...     "age": 24
... }
undefined
> 
> s = JSON.stringify(o)
'{"name":"Test Name","age":24}'
> 
> s = JSON.stringify(o, undefined, 4)
'{\n    "name": "Test Name",\n    "age": 24\n}'
> 
> console.log(s)
{
    "name": "Test Name",
    "age": 24
}
undefined
> 
> for(k in o) {
... s = s.replace("\"" + k + "\":", k + ':')
... }
'{\n    name: "Test Name",\n    age: 24\n}'
> 
> console.log(s)
{
    name: "Test Name",
    age: 24
}
undefined
> 

你也可以看看这个。

【讨论】:

  • 遗憾的是,仅在与示例一样简单的对象一起使用时才有效。例如,如果键或值包含 " 或存在嵌套对象,则此操作将失败。
  • 另请注意,某些输入 JSON 可能在 24 整数值周围有引号
  • 是的,你是对的,我已经提到如果@Ajil 有任何复杂的 JSON,那么他/她将需要改进代码的查找和替换实用程序。我只是根据提供的当前 i/p 进行介绍。谢谢。
猜你喜欢
  • 2020-09-28
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
相关资源
最近更新 更多