[英]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.