簡體   English   中英

將鍵值對的字符串數組轉換為對象數組 javascript

[英]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"
    }
]

請注意,它將解決您的實際問題,但仍然:

  • 它不會在所有情況下都有效(如果某處的字符串或雙引號中有逗號。
  • 我強烈建議您聯系 API 設計師,因為他們創造了一種超級奇特的格式,根本無法縮放。

您將需要一個自定義解析器,因為它是一個字符串並且不符合 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM