[英]Convert string array of key-value pair to array of objects javascript
我從 API 得到的響應是這樣的:
"1012": "[{oId=151, oName=store city}, {oId=247, oName=customer city}]"
我想將輸出的值轉換為對象數組,如下所示:
[
{
"oId": 151,
"oName": "store city"
},
{
"oId": 247,
"oName": "customer city"
}
]
你能幫我在 JavaScript 中如何做到這一點嗎?
由於響應不是 JSON並且我們不完全知道 API 響應的規范(是否有此類返回的規范?),您可以嘗試使用骯臟的 hack來解析它。
const str = "[{oId=151, oName=store city}, {oId=247, oName=customer city}]";
const result = JSON.parse(
str.replaceAll(", ", ",")
.replace(/([^,{]+)?=([^,}]+)?/gi, `"$1":"$2"`) // Sorry.
);
結果將返回:
[
{
"oId": 151,
"oName": "store city"
},
{
"oId": 247,
"oName": "customer city"
}
]
請注意,它將解決您的實際問題,但仍然:
您將需要一個自定義解析器,因為它是一個字符串並且不符合 JSON 格式。 以下片段可能對您有所幫助:
const data = { "1012": "[{oId=151, oName=store city}, {oId=247, oName=customer city}]" } function parseCustom(str) { const regex = /(\w+)=(.*?)([,}])/gm; const subst = `"$1":"$2"$3`; return str.replace(regex, subst); } const parsedData = JSON.parse(parseCustom(data["1012"])) console.log(parsedData)
上面的解決方案使用正則表達式將=
替換為:
並進行了一些其他基本替換,使其看起來像 JSON。上面的解決方案仍會將數字視為字符串作為其內部引號。 下面的代碼片段循環遍歷數組並在 object 的值中存在任何有效數字時進行轉換。運行代碼片段以查看它是否符合您的要求。
const data = { "1012": "[{oId=151, oName=store city}, {oId=247, oName=customer city}]" } function parseCustom(str) { const regex = /(\w+)=(.*?)([,}])/gm; const subst = `"$1":"$2"$3`; return str.replace(regex, subst); } const parsedData = JSON.parse(parseCustom(data["1012"])) // parse values as numbers if its valid Number // assumes that the parsedData is an Array const parsedDataNumber = parsedData.map(d => { for (let key in d) { if (Number(d[key])) { d[key] = Number(d[key]) } } return d }) console.log("Number parsed") console.log(parsedDataNumber)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.