我有一个字符串来描述一个对象,并想将它转换成一个 JS 对象。
字符串:
{
"platform": "desktop",
pageName: "JD Sports - Nike Air Force 1 07 LV8 Herren", //Page Title
pageType: "product", //Page Type
plu: "16085947_jdsportsde", //Product Code
description: "Nike Air Force 1 07 LV8 Herren", //Product Name
unitPrice: "110.00", //Product Price
category: "Herren \u003E Herrenschuhe \u003E Sneakers", //End level category
categoryId: "jdsportsde_ct81275jdsportsde_ct81279jdsportsde_ct81356jdsportsde", //End level category Id
sale: false, //is on sale? true/false
brand: "Nike", //Product Brand
ownbrand: false, //own brand product? true/false
exclusive: false, //exclusive product? true/false
onlineexlusive: false, //online exlcusive product? true/false
currency:"EUR",
variants: [
{
name:"41",
upc: "0194501189583",
page_id_variant: "16085947_jdsportsde.0194501189583"
}
, {
name:"42.5",
upc: "0194501189606",
page_id_variant: "16085947_jdsportsde.0194501189606"
}
, {
name:"45",
upc: "0194501189644",
page_id_variant: "16085947_jdsportsde.0194501189644"
}
, {
name:"47",
upc: "0194501189675",
page_id_variant: "16085947_jdsportsde.0194501189675"
}
, {
name:"47.5",
upc: "0194501189682",
page_id_variant: "16085947_jdsportsde.0194501189682"
}
, {
name:"48.5",
upc: "0194501189699",
page_id_variant: "16085947_jdsportsde.0194501189699"
}
, {
name:"L",
upc: "0194501189569",
page_id_variant: "16085947_jdsportsde.0194501189569"
}
]
};
因为键不在引号中并且由于注释我不能使用 JSON.parse() 如何将我的字符串转换为对象?
答案 0 :(得分:1)
它看起来更像是真正的 JavaScript,而不是 JSON。
虽然它通常被认为是 evil,但您可以使用 eval
来解析(并执行!)它,冒着运行不受控制的脚本的风险,无论是在您的用户的浏览器或在您的后端:
var str = `{
"platform": "desktop",
pageName: "JD Sports - Nike Air Force 1 07 LV8 Herren", //Page Title
pageType: "product", //Page Type
plu: "16085947_jdsportsde", //Product Code
description: "Nike Air Force 1 07 LV8 Herren", //Product Name
unitPrice: "110.00", //Product Price
category: "Herren \u003E Herrenschuhe \u003E Sneakers", //End level category
categoryId: "jdsportsde_ct81275jdsportsde_ct81279jdsportsde_ct81356jdsportsde", //End level category Id
sale: false, //is on sale? true/false
brand: "Nike", //Product Brand
ownbrand: false, //own brand product? true/false
exclusive: false, //exclusive product? true/false
onlineexlusive: false, //online exlcusive product? true/false
currency:"EUR",
variants: [
{
name:"41",
upc: "0194501189583",
page_id_variant: "16085947_jdsportsde.0194501189583"
}
, {
name:"42.5",
upc: "0194501189606",
page_id_variant: "16085947_jdsportsde.0194501189606"
}
, {
name:"45",
upc: "0194501189644",
page_id_variant: "16085947_jdsportsde.0194501189644"
}
, {
name:"47",
upc: "0194501189675",
page_id_variant: "16085947_jdsportsde.0194501189675"
}
, {
name:"47.5",
upc: "0194501189682",
page_id_variant: "16085947_jdsportsde.0194501189682"
}
, {
name:"48.5",
upc: "0194501189699",
page_id_variant: "16085947_jdsportsde.0194501189699"
}
, {
name:"L",
upc: "0194501189569",
page_id_variant: "16085947_jdsportsde.0194501189569"
}
]
};`;
eval("obj = " + str);
console.log(obj.pageName);
答案 1 :(得分:0)
首先,如果您绝对信任源代码,则可以使用 eval,因为它看起来更像 JS 而不是 JSON!换句话说,除非您 100% 确定,否则不要这样做。
var s = `{
"platform": "desktop",
pageName: "JD Sports - Nike Air Force 1 07 LV8 Herren", //Page Title
pageType: "product", //Page Type
plu: "16085947_jdsportsde", //Product Code
description: "Nike Air Force 1 07 LV8 Herren" //Product Name
}`;
var obj;
eval('obj = ' + s);
console.log(obj.pageType);
// and convert it to valid JSON
var json = JSON.stringify(obj);
console.log('JSON: ', json);
答案 2 :(得分:0)
最好的解决方案是修复为您提供此字符串的代码,而不是在创建后尝试处理格式错误的字符串。更喜欢解决原因而不是结果。
如果这是不可能的,或者由于任何原因您不想这样做,那么唯一的解决方案就是使用一个小技巧:
const string = `{
"platform": "desktop",
pageName: "JD Sports - Nike Air Force 1 07 LV8 Herren", //Page Title
pageType: "product", //Page Type
plu: "16085947_jdsportsde", //Product Code
description: "Nike Air Force 1 07 LV8 Herren", //Product Name
unitPrice: "110.00", //Product Price
category: "Herren > Herrenschuhe > Sneakers", //End level category
categoryId: "jdsportsde_ct81275jdsportsde_ct81279jdsportsde_ct81356jdsportsde", //End level category Id
sale: false, //is on sale? true/false
brand: "Nike", //Product Brand
ownbrand: false, //own brand product? true/false
exclusive: false, //exclusive product? true/false
onlineexlusive: false, //online exlcusive product? true/false
currency:"EUR",
variants: [
{
name:"41",
upc: "0194501189583",
page_id_variant: "16085947_jdsportsde.0194501189583"
}
, {
name:"42.5",
upc: "0194501189606",
page_id_variant: "16085947_jdsportsde.0194501189606"
}
, {
name:"45",
upc: "0194501189644",
page_id_variant: "16085947_jdsportsde.0194501189644"
}
, {
name:"47",
upc: "0194501189675",
page_id_variant: "16085947_jdsportsde.0194501189675"
}
, {
name:"47.5",
upc: "0194501189682",
page_id_variant: "16085947_jdsportsde.0194501189682"
}
, {
name:"48.5",
upc: "0194501189699",
page_id_variant: "16085947_jdsportsde.0194501189699"
}
, {
name:"L",
upc: "0194501189569",
page_id_variant: "16085947_jdsportsde.0194501189569"
}
]};`
let object
eval("object = " + string)
这将创建一个基于 string
的对象。