2017-04-17 91 views
-2

我想解析一些JSON,但它似乎我有壞的控制字符,即使http://jsonlint.com表明它是有效的。我需要改變什麼才能真正有效?問題解析有效的JSON

{"panes": [{"col": {"3": 1}, "row": {"3": 1}, "width": 1, "widgets": [{"type": "Slider", "settings": {"max": 100, "min": 0, "step": 1, "color": "grey", "onSlide": "// Example: Convert temp from C to F and truncate to 2 decimal places.\n// return (datasources[\"MyDatasource\"].sensor.tempInF * 1.8 + 32).toFixed(2);\n\n", "showvalue": 1, "initialvalue": "0"}}], "col_width": 1}], "columns": null, "plugins": [], "version": 1, "allow_edit": true, "datasources": []} 

這是輸出形式JSONLint,它指示其有效JSON。當試圖用它來JSON.parse解析(),我得到的folling錯誤:

SyntaxError: JSON.parse: bad control character in string literal at line 1 column 235 of the JSON data

{ 
    "panes": [{ 
     "col": { 
      "3": 1 
     }, 
     "row": { 
      "3": 1 
     }, 
     "width": 1, 
     "widgets": [{ 
      "type": "Slider", 
      "settings": { 
       "max": 100, 
       "min": 0, 
       "step": 1, 
       "color": "grey", 
       "onSlide": "// Example: Convert temp from C to F and truncate to 2 decimal places.\n// return (datasources[\"MyDatasource\"].sensor.tempInF * 1.8 + 32).toFixed(2);\n\n", 
       "showvalue": 1, 
       "initialvalue": "0" 
      } 
     }], 
     "col_width": 1 
    }], 
    "columns": null, 
    "plugins": [], 
    "version": 1, 
    "allow_edit": true, 
    "datasources": [] 
} 

我試圖解析PHP對象屬性。

var js_object = JSON.parse('<?= php_object->json ?>'); 
+0

HTTPS您可以直接訪問它,每一個對象:// EN .wikipedia.org/wiki/Byte_order_mark – diavolic

+1

它已經是一個JS對象,你需要解析它 –

+1

我只能猜測你把這個確切的值放入一個字符串文字(''...'')並嘗試來解析這個價值。這是行不通的,因爲轉義字符沒有正確轉義。所以,要麼[逃避轉義字符](https://jsfiddle.net/4p1zvzrs/)或更好,不要把它放在字符串文字中,也不要使用'JSON.parse',讓JavaScript將它評估爲對象文字。 –

回答

1

沒有必要爲你解析數據,使用JavaScript dot[brackets]符號

var data = { 
 
    "panes": [{ 
 
     "col": { 
 
      "3": 1 
 
     }, 
 
     "row": { 
 
      "3": 1 
 
     }, 
 
     "width": 1, 
 
     "widgets": [{ 
 
      "type": "Slider", 
 
      "settings": { 
 
       "max": 100, 
 
       "min": 0, 
 
       "step": 1, 
 
       "color": "grey", 
 
       "onSlide": "// Example: Convert temp from C to F and truncate to 2 decimal places.\n// return (datasources[\"MyDatasource\"].sensor.tempInF * 1.8 + 32).toFixed(2);\n\n", 
 
       "showvalue": 1, 
 
       "initialvalue": "0" 
 
      } 
 
     }], 
 
     "col_width": 1 
 
    }], 
 
    "columns": null, 
 
    "plugins": [], 
 
    "version": 1, 
 
    "allow_edit": true, 
 
    "datasources": [] 
 
} 
 

 
console.log(data.panes);

+0

如果通過XHR請求檢索數據會怎麼樣?是什麼讓你認爲數據在JS源代碼中? –

+0

服務器有可能用適當的頭文件返回響應,所以不需要再解析它 – gaganshera

+0

@gaganshera:服務器響應不會自動分析。你可能會想到jQuery。另外,如果數據已被解析並且OP試圖將對象傳遞給'JSON.parse',則錯誤將會不同。 –