将纯文本转换为对象

时间:2017-08-19 21:21:32

标签: javascript arrays object lodash

我的数据格式非常const variations

const variations = {
  0: "{"productPriceLocal": "16990.00", "productId": "30028132"}",
  1: "{"productPriceLocal": "22990.00", "productId": "30028233"}"
};

// this code doesn't work
// console.log(_.map(variations, 'productId'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

我希望这个转换为这样的普通JS对象,我可以正常工作

const object = {
  0: {
    productId: 30028132,
    ...
  },
  ...
}

我尝试使用lodash,效果不佳。有谁知道,我应该怎么做?

2 个答案:

答案 0 :(得分:2)

您遇到的第一个问题是"{"productPriceLocal": "16990.00", "productId": "30028132"}"包含在您希望之前终止字符串的未转义引号(导致错误)。因此,如果您包含带单引号的字符串,则应修复第一个问题。

然后解析JSON对象,如下所示,应该产生你正在寻找的输出,没有lodash nessecary。

const variations = {
  0: '{"productPriceLocal": "16990.00", "productId": "30028132"}',
  1: '{"productPriceLocal": "22990.00", "productId": "30028233"}'
};

var output = {};

for(key in variations) {
  output[key] = JSON.parse(variations[key]);
}

console.log(output);

答案 1 :(得分:1)

您可以使用数组reduceObject.keys方法将对象映射到您想要的类型的单个对象。

//Make sure you escape the quotes in your JSON strings.
const variations = {
      0: "{\"productPriceLocal\": \"16990.00\", \"productId\": \"30028132\"}",
      1: "{\"productPriceLocal\": \"22990.00\", \"productId\": \"30028233\"}"
    };

let parsedValues = Object.keys(variations) // Get keys as an array [0,1] 
  .reduce((obj, key) => { 
         // parse to an object.
         obj[key] = JSON.parse(variations[key]); 
         return obj; 
  }, {} /* initialization object */);
console.log(parsedValues);