Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将类似JSON的字符串转换为JSON_Javascript_Json_String_Object - Fatal编程技术网

Javascript 将类似JSON的字符串转换为JSON

Javascript 将类似JSON的字符串转换为JSON,javascript,json,string,object,Javascript,Json,String,Object,我有一个描述对象的字符串,希望将其转换为JS对象 字符串: { "platform": "desktop", pageName: "JD Sports - Nike Air Force 1 07 LV8 Herren", //Page Title pageType: "product", //Page Type plu: "16085947_jdsportsde"

我有一个描述对象的字符串,希望将其转换为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()
如何将字符串转换为对象?

它看起来更像实际的javascript而不是JSON

虽然它通常被认为是,但您可以使用
eval
来解析(并执行!)它,但在用户浏览器或后端可能会运行不受控制的脚本:

var str=`{
“平台”:“桌面”,
页面名称:“京东体育-Nike Air Force 1 07 LV8 Herren”//页面标题
页面类型:“产品”,//页面类型
plu:“16085947_jdportsde”,//产品代码
说明:“Nike Air Force 1 07 LV8 Herren”,//产品名称
单价:“110.00”,//产品价格
类别:“Herren\u003E Herrenschuhe\u003E运动鞋”//末级类别
类别Id:“jdportsde_ct81275jdportsde_ct81279jdportsde_ct81356jdportsde”,//最终级别类别Id
销售:假,//正在销售?真/假
品牌:“Nike”,//产品品牌
自有品牌:假,//自有品牌产品?真/假
独家:假,//独家产品?真/假
onlineexlusive:false,//在线独家产品?真/假
货币:“欧元”,
变体:[
{
姓名:"41",,
upc:“0194501189583”,
页面id变量:“16085947\u jdportsde.0194501189583”
}
,                       {
名称:“42.5”,
upc:“0194501189606”,
页面id变量:“16085947\u jdsportsde.0194501189606”
}
,                       {
姓名:"45",,
upc:“0194501189644”,
页面id变量:“16085947\u jdportsde.0194501189644”
}
,                       {
姓名:“47”,
upc:“0194501189675”,
页面id变量:“16085947\u jdportsde.0194501189675”
}
,                       {
名称:“47.5”,
upc:“0194501189682”,
页面id变量:“16085947\u jdportsde.0194501189682”
}
,                       {
名称:“48.5”,
upc:“0194501189699”,
页码id变量:“16085947\u jdsportsde.0194501189699”
}
,                       {
姓名:“L”,
upc:“0194501189569”,
页面id变量:“16085947\u jdportsde.0194501189569”
}
]
};`;
评估(“obj=”+str);

console.log(对象pageName)首先,如果您完全信任源代码,您可以使用eval,因为它看起来更像JS而不是JSON!换句话说,除非你100%确定,否则不要这样做

var s=`{
“平台”:“桌面”,
页面名称:“京东体育-Nike Air Force 1 07 LV8 Herren”//页面标题
页面类型:“产品”,//页面类型
plu:“16085947_jdportsde”,//产品代码
说明:“Nike Air Force 1 07 LV8 Herren”//产品名称
}`;
var-obj;
评估('obj='+s);
控制台日志(对象页面类型);
//并将其转换为有效的JSON
var json=json.stringify(obj);

log('JSON:',JSON)最好的解决方案是修复提供此字符串的代码,而不是在创建错误格式的字符串后尝试处理它。宁愿解决原因而不是后果

如果这是不可能的,或者出于任何原因您不想这样做,那么唯一的解决方案就是使用一个小技巧:

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

创建一个对象,您从哪里获取该字符串?我的意思是,您在后端使用的语言是rails还是c#。它是否也包含注释?如果是这样的话,他们也会想要脱衣的。@QuadSquad工作了!非常感谢。