簡體   English   中英

將類似 JSON 的字符串轉換為 JSON

[英]Convert JSON-like String to JSON

我有一個描述對象的字符串,並希望將其轉換為 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。

雖然它通常被認為是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 \> 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" } ] };`; eval("obj = " + str); console.log(obj.pageName);

首先,如果您絕對信任源代碼,則可以使用 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);

最好的解決方案是修復為您提供此字符串的代碼,而不是在創建后嘗試處理格式錯誤的字符串。 更喜歡解決原因而不是結果。

如果這是不可能的,或者由於任何原因您不想這樣做,那么唯一的解決方案是使用一個小技巧:

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的對象。

我有一個描述對象的字符串,並想將其轉換為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(),如何將String轉換為對象?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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