Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串转换为JSON并在Node.js中美化它_Javascript_Node.js_Regex - Fatal编程技术网

Javascript 将字符串转换为JSON并在Node.js中美化它

Javascript 将字符串转换为JSON并在Node.js中美化它,javascript,node.js,regex,Javascript,Node.js,Regex,我正在从服务器接收以下数据: { "_id" : ObjectId("5f42eb030ce39b30b86a6519"), "username" : "test", "password" : "$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG" } { "_id" : ObjectId("5f42efa1b9

我正在从服务器接收以下数据:

{ "_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)
//它转换为字符串JSON,但我想要对象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
。首先在对象之间插入逗号
,第一个列表项上的想法是正确的,但可能是错误的分隔符不是单个的空格,或者可能是一个换行符,因此最好使用正则表达式/}\s*{/

const resp=`{u id:ObjectId(“5f42eb030ce39b30b86a6519”),“用户名”:“测试”,
“密码”:“$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG”}
{“_id”:ObjectId(“5f42efa1b9f7e2321c55a9c1”),“用户名”:“管理员”,“密码”:
“$2a$10$G/ggyvxo/rduodxis0isefskaw9cs8hlca3u”}”;
fixMultObj=resp.replace(/}\s*{/,'},{');
console.log(fixMultObj)
/*
{“_id”:ObjectId(“5f42eb030ce39b30b86a6519”),“用户名”:“测试”,“密码”:
“$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG”},{“\u id”:
ObjectId(“5f42efa1b9f7e2321c55a9c1”),“用户名”:“管理员”,“密码”:
“$2a$10$G/ggyvxo/rduodxis0isefskaw9cs8hlca3u”}
*/
现在,您可以转义ObjectId十六进制值周围的双引号,并在ObjectId本身上添加双引号

fixQuotes=fixMultObj.replace(/ObjectId\(“(\S+”\)/g,“ObjectId(\\”$1\”);
console.log(fixQuotes)
/*
{“\u id”:“ObjectId(\“5f42eb030ce39b30b86a6519\”),“用户名”:“测试”,“密码”:
“$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG”},{“\u id”:
“ObjectId(\“5f42efa1b9f7e2321c55a9c1\”),“用户名”:“管理员”,“密码”:
“$2a$10$G/ggyvxo/rduodxis0isefskaw9cs8hlca3u”}
*/
使数组表示法能够到达多个对象

makeArray=JSON.parse(`[${fixQuotes}]`)
log(makeArray)
/*
[{u id:'ObjectId(“5f42eb030ce39b30b86a6519”),
用户名:“测试”,
密码:'$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG'},
{u id:'ObjectId(“5f42efa1b9f7e2321c55a9c1”),
用户名:“admin”,
密码:'$2a$10$G/GGYVXO/RDuoDXIS0iSeFsKAOw9Cs8HlCa3U']
*/
并从JSON对象中获取所需的值

console.log(makeArray[1]。\u id)
//目标(“5f42efa1b9f7e2321c55a9c1”)

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

const resp=`{u id:ObjectId(“5f42eb030ce39b30b86a6519”),“用户名”:“测试”,
“密码”:“$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG”}
{“_id”:ObjectId(“5f42efa1b9f7e2321c55a9c1”),“用户名”:“管理员”,“密码”:
“$2a$10$G/ggyvxo/rduodxis0isefskaw9cs8hlca3u”}”;
fixMultObj=resp.replace(/}\s*{/,'},{');
console.log(fixMultObj)
/*
{“_id”:ObjectId(“5f42eb030ce39b30b86a6519”),“用户名”:“测试”,“密码”:
“$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG”},{“\u id”:
ObjectId(“5f42efa1b9f7e2321c55a9c1”),“用户名”:“管理员”,“密码”:
“$2a$10$G/ggyvxo/rduodxis0isefskaw9cs8hlca3u”}
*/
现在,您可以转义ObjectId十六进制值周围的双引号,并在ObjectId本身上添加双引号

fixQuotes=fixMultObj.replace(/ObjectId\(“(\S+”\)/g,“ObjectId(\\”$1\”);
console.log(fixQuotes)
/*
{“\u id”:“ObjectId(\“5f42eb030ce39b30b86a6519\”),“用户名”:“测试”,“密码”:
“$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG”},{“\u id”:
“ObjectId(\“5f42efa1b9f7e2321c55a9c1\”),“用户名”:“管理员”,“密码”:
“$2a$10$G/ggyvxo/rduodxis0isefskaw9cs8hlca3u”}
*/
使数组表示法能够到达多个对象

makeArray=JSON.parse(`[${fixQuotes}]`)
log(makeArray)
/*
[{u id:'ObjectId(“5f42eb030ce39b30b86a6519”),
用户名:“测试”,
密码:'$2a$10$95H4m8QFoeeA0bF4klEb2OIQ8/SIz0raOJG'},
{u id:'ObjectId(“5f42efa1b9f7e2321c55a9c1”),
用户名:“admin”,
密码:'$2a$10$G/GGYVXO/RDuoDXIS0iSeFsKAOw9Cs8HlCa3U']
*/
并从JSON对象中获取所需的值

console.log(makeArray[1]。\u id)
//目标(“5f42efa1b9f7e2321c55a9c1”)

我不确定你说的“字符串JSON”而不是“对象JSON”是什么意思。
JSON.parse()
应该可以用。我是在做了JSON.parse()之后得到这个结果的:['{u id]:ObjectId(“5f42eb030ce39b30b86a6519”),“username:“test”,“password:“$2a$10$95H4M8QFOEA0BF4KLEB2OIQ8/SIz0raOJG”},{“\u id:“ObjectId”(“5F42EFA2EFA1B9F7C55A9C1”),“用户名”:“admin”,“password”:“$2a$10$G/ggyvxo/RDuoDXIS0iSeFsKAOw9Cs8HlCa3U”}”]但是当我使用JSON.stringify(数据,null,4);为了美化我得到的斜杠(\)如下:[“{\”\u id\”:ObjectId(\“5f42eb030ce39b30b30b30b86a6519\”),“username\”:“test\”,……等等]这不是一个有效的JSON字符串。请打开web浏览器。打开调试控制台。执行“let a=”…your string…”然后执行JSON.parse(a)。它将失败,因为ObjectId处有无效字符。明白了,那么我如何才能使其有效?我不确定“string JSON”而不是“Object JSON”是什么意思。
JSON.parse()
应该行得通。我收到了