簡體   English   中英

如何從 JSON 對象中獲取值

[英]How to get values from JSON object

我有一個字符串,其中包含我想使用的值。 我正在使用 $.parseJSON 將此字符串解析為 JSON 對象。 但是,我在獲取實際值時遇到了問題。

在這種情況下,我試圖獲取鍵“textarea1”的值,即“banana”。 獲取值的正確語法是什么。 我試過 obj.texts.textarea1,但沒有用。

字符串如下所示:

var obj = "[{\"texts\":[{\"default\":true,\"bread-texts\":false,\"textarea1\":\"Banana\",\"textarea2\":\"Kiwi\",\"textarea3\":\Apple\",\"textarea4\":\"coffe\",\"textarea5\":\"Tea\",\"signature\":true,\"profile\":\"header\",\"fontsize\":\"26\",\"fontsize-headers\":\"10.5\",\"fontcolor\":\"#0000\",\"textfont\":\"header-large\",\"textsub1\":\"Bold\",\"font\":\"ICA%20Text\",\"textsub\":\"Regular\",\"textsize\":\"20\",\"textsize-signature\":\"9.5\",\"textsizesmall\":\"5.5\",\"textsizesmall-placer\":\"2.75\",\"vers-placer\":\"false\",\"text-colored\":\"%23000000\",\"s-all-customers\":true,\"new-customers\":true,\"undefined\":\"\"}]}]";

腳本:

var oldVal = $.parseJSON(obj);

第一個選項您無需更改任何內容。 只需以正確的格式修復您的 JSON。

您可以使用JsonLint來檢查您的JSON是否正確。 然后繼續。

var obj = "[{\"texts\":[{\"default\":true,\"bread-texts\":false,\"textarea1\":\"Banana\",\"textarea2\":\"Kiwi\",\"textarea3\":\"Apple\",\"textarea4\":\"coffe\",\"textarea5\":\"Tea\",\"signature\":true,\"profile\":\"header\",\"fontsize\":\"26\",\"fontsize-headers\":\"10.5\",\"fontcolor\":\"#0000\",\"textfont\":\"header-large\",\"textsub1\":\"Bold\",\"font\":\"ICA%20Text\",\"textsub\":\"Regular\",\"textsize\":\"20\",\"textsize-signature\":\"9.5\",\"textsizesmall\":\"5.5\",\"textsizesmall-placer\":\"2.75\",\"vers-placer\":\"false\",\"text-colored\":\"%23000000\",\"s-all-customers\":true,\"new-customers\":true,\"undefined\":\"\"}]}]";

var oldVal = JSON.parse(obj);

alert(oldVal[0].texts[0].textarea1)

第二個選項

如果你想得到像obj.texts.textarea1這樣的結果,那么你必須改變你的數據如下。

格式化您的 JSON 從您的 json 中刪除所有[] 然后做。

var a = '{"texts": {"default": true,"bread-texts": false,"textarea1": "Banana","textarea2": "Kiwi","textarea3": "Apple","textarea4": "coffe","textarea5": "Tea","signature": true,"profile": "header","fontsize": "26","fontsize-headers": "10.5","fontcolor": "#0000","textfont": "header-large","textsub1": "Bold","font": "ICA%20Text","textsub": "Regular","textsize": "20","textsize-signature": "9.5","textsizesmall": "5.5","textsizesmall-placer": "2.75","vers-placer": "false","text-colored": "%23000000","s-all-customers": true,"new-customers": true,"undefined": ""} }';

var obj = JSON.parse(a);

然后

obj.texts.textarea1 ;

您已經在JSON創建了數組,因此您需要進行數組訪問。

在此處輸入圖片說明

  1. 缺少對 \\Apple 的報價
  2. 您訪問 obj 但需要訪問 oldVal
  3. 你有嵌套數組,所以你需要數組符號來獲取它們或展平數組
  4. 您不需要 jQuery,並且可能還沒有定義它。 JSON.parse 將工作

 var obj = "[{\\"texts\\":[{\\"default\\":true,\\"bread-texts\\":false,\\"textarea1\\":\\"Banana\\",\\"textarea2\\":\\"Kiwi\\",\\"textarea3\\":\\"Apple\\",\\"textarea4\\":\\"coffe\\",\\"textarea5\\":\\"Tea\\",\\"signature\\":true,\\"profile\\":\\"header\\",\\"fontsize\\":\\"26\\",\\"fontsize-headers\\":\\"10.5\\",\\"fontcolor\\":\\"#0000\\",\\"textfont\\":\\"header-large\\",\\"textsub1\\":\\"Bold\\",\\"font\\":\\"ICA%20Text\\",\\"textsub\\":\\"Regular\\",\\"textsize\\":\\"20\\",\\"textsize-signature\\":\\"9.5\\",\\"textsizesmall\\":\\"5.5\\",\\"textsizesmall-placer\\":\\"2.75\\",\\"vers-placer\\":\\"false\\",\\"text-colored\\":\\"%23000000\\",\\"s-all-customers\\":true,\\"new-customers\\":true,\\"undefined\\":\\"\\"}]}]"; var oldVal = JSON.parse(obj); console.log(oldVal[0].texts[0].textarea1)

如果你想訪問oldVal.texts.textarea1你需要刪除數組:

var obj = "{\"texts\":{\"default\":true,\"bread-texts\":false,\"textarea1\":\"Banana\",\"textarea2\":\"Kiwi\",\"textarea3\":\"Apple\",\"textarea4\":\"coffe\",\"textarea5\":\"Tea\",\"signature\":true,\"profile\":\"header\",\"fontsize\":\"26\",\"fontsize-headers\":\"10.5\",\"fontcolor\":\"#0000\",\"textfont\":\"header-large\",\"textsub1\":\"Bold\",\"font\":\"ICA%20Text\",\"textsub\":\"Regular\",\"textsize\":\"20\",\"textsize-signature\":\"9.5\",\"textsizesmall\":\"5.5\",\"textsizesmall-placer\":\"2.75\",\"vers-placer\":\"false\",\"text-colored\":\"%23000000\",\"s-all-customers\":true,\"new-customers\":true,\"undefined\":\"\"}}";

obj是字符串類型。 您不能以obj.texts形式將其索引為對象。 您正在使用$.parseJSON解析它,然后使用該調用返回的對象

var oldVal = $.parseJSON( obj );
var value = oldVal[0].texts[0].textarea1;

您的 JSON 無效。

在這個地方,你錯過了一個報價:

\"textarea3\":\Apple\" (escaped)
"textarea3":Apple" (unescaped)

此時 JSON 解析將失敗。

修正這個錯字后,我可以通過這種方式輕松訪問您的 JSON 項目:

 var obj = "[{\\"texts\\":[{\\"default\\":true,\\"bread-texts\\":false,\\"textarea1\\":\\"Banana\\",\\"textarea2\\":\\"Kiwi\\",\\"textarea3\\":\\"Apple\\",\\"textarea4\\":\\"coffe\\",\\"textarea5\\":\\"Tea\\",\\"signature\\":true,\\"profile\\":\\"header\\",\\"fontsize\\":\\"26\\",\\"fontsize-headers\\":\\"10.5\\",\\"fontcolor\\":\\"#0000\\",\\"textfont\\":\\"header-large\\",\\"textsub1\\":\\"Bold\\",\\"font\\":\\"ICA%20Text\\",\\"textsub\\":\\"Regular\\",\\"textsize\\":\\"20\\",\\"textsize-signature\\":\\"9.5\\",\\"textsizesmall\\":\\"5.5\\",\\"textsizesmall-placer\\":\\"2.75\\",\\"vers-placer\\":\\"false\\",\\"text-colored\\":\\"%23000000\\",\\"s-all-customers\\":true,\\"new-customers\\":true,\\"undefined\\":\\"\\"}]}]"; // using JSON.parse document.body.innerHTML = JSON.parse(obj)[0].texts[0].textarea1; // or using jQuery document.body.innerHTML += $.parseJSON(obj)[0].texts[0].textarea1;
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

暫無
暫無

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

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