簡體   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