繁体   English   中英

将 String 转换为 JSON 并在 Node.js 中对其进行美化

[英]Convert String to JSON and prettify it in Node.js

我从服务器收到以下数据:

{ "_id" : ObjectId("5f42eb030ce39b30b86a6519"), "username" : "test", "password" : "$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG" }

{ "_id" : ObjectId("5f42efa1b9f7e2321c55a9c1"), "username" : "admin", "password" : "$2a$10$G/gGYVVxO/RDuoDXIS0iSeFsKAOw9Cs8HlCa3U" }

我想将其转换为有效的 JSON 对象并对其进行美化以供查看。 我试过的一些方法:

let data = ({ "_id" : ObjectId("5f42eb030ce39b30b86a6519"), "username" : "test", "password" : "$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG" }

{ "_id" : ObjectId("5f42efa1b9f7e2321c55a9c1"), "username" : "admin", "password" : "$2a$10$G/gGYVVxO/RDuoDXIS0iSeFsKAOw9Cs8HlCa3U" })

1. data = data.trim().replace("} {", "}, {") //在两个{}之间放一个逗号(,)。

2. data = JSON.stringify(data, null, 4); //它在每个单词后生成“反斜杠(\\)”

3. data=JSON.parse(data) //它转换为String JSON 但我想要Object JSON。

做完JSON.stringify((JSON.parse(data)), null, 4); 这是我得到的回应:

 ["{ \"_id\" : ObjectId(\"5f42eb030ce39b30b86a6519\"), \"username\" : \"test\", \"password\" : \"$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG\" }, 
{ \"_id\" : ObjectId(\"5f42efa1b9f7e2321c55a9c1\"), \"username\" : \"admin\", \"password\" : \"$2a$10$G/gGYVVxO/RDuoDXIS0iSeFsKAOw9Cs8HlCa3U\" }"]

如何将其转换为有效的 JSON 对象并对其进行美化以供查看? 先感谢您。

作为替代方案,您可以使用正则表达式来转义 de ObjectId的双引号,然后修复ObjectId 首先在对象之间插入一个逗号,第一个列表项的想法是正确的,但分隔符可能不是single空格,或者可能是line break ,因此最好使用正则表达式/}\\s*{/

const resp = `{ "_id" : ObjectId("5f42eb030ce39b30b86a6519"), "username" : "test",
 "password" : "$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG" }
    { "_id" : ObjectId("5f42efa1b9f7e2321c55a9c1"), "username" : "admin", "password" :
 "$2a$10$G/gGYVVxO/RDuoDXIS0iSeFsKAOw9Cs8HlCa3U" }`;

fixMultObj = resp.replace(/}\s*{/, '}, {');
console.log(fixMultObj)
/*
{ "_id" : ObjectId("5f42eb030ce39b30b86a6519"), "username" : "test", "password" :
 "$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG" }, { "_id" :
ObjectId("5f42efa1b9f7e2321c55a9c1"), "username" : "admin", "password" :
 "$2a$10$G/gGYVVxO/RDuoDXIS0iSeFsKAOw9Cs8HlCa3U" }
*/

现在您可以转义 ObjectId 十六进制值周围的双引号,并在 ObjectId 本身上添加双引号。

fixQuotes = fixMultObj.replace(/ObjectId\("(\S+)"\)/g, '"ObjectId(\\"$1\\")"');
console.log(fixQuotes)
/*
{ "_id" : "ObjectId(\"5f42eb030ce39b30b86a6519\")", "username" : "test", "password" :
 "$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG" }, { "_id" :
"ObjectId(\"5f42efa1b9f7e2321c55a9c1\")", "username" : "admin","password" :
"$2a$10$G/gGYVVxO/RDuoDXIS0iSeFsKAOw9Cs8HlCa3U" }
*/

使数组符号能够到达多个对象。

makeArray = JSON.parse(`[${fixQuotes}]`)

console.log(makeArray)
/*
[ { _id: 'ObjectId("5f42eb030ce39b30b86a6519")',
    username: 'test',
    password: '$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG' },
  { _id: 'ObjectId("5f42efa1b9f7e2321c55a9c1")',
    username: 'admin',
    password: '$2a$10$G/gGYVVxO/RDuoDXIS0iSeFsKAOw9Cs8HlCa3U' } ]
*/

并从 JSON 对象中获取所需的值。

console.log(makeArray[1]._id)
// ObjectId("5f42efa1b9f7e2321c55a9c1")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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