2015-10-19 4 views
-4

У меня есть строка со значениями, которые я хочу использовать. Я разбираю эту строку как объект JSON, используя $ .parseJSON. Однако у меня возникают проблемы с получением фактических значений.Как получить значения из объекта JSON

В этом случае я пытаюсь получить значение ключа «textarea1», который является «бананом». Каков правильный синтаксис для получения значений. Я попробовал 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); 
+1

«Im разбор этой строки как объект JSON с помощью $ .parseJSON "- Почему бы вам не показать нам, как это сделать? У вас есть несколько бит кода, но вы, кажется, показываете их в неправильном порядке с отсутствующими битами. Попробуйте собрать настоящий тестовый пример. – Quentin

+0

'var d = JSON.parse (obj) [0] .texts [0] .textarea1' – Satpal

+0

и проверьте значение appel. Я думаю, что вы пропустили двойную цитату. – flipper

ответ

1
  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\":\"\"}}"; 
+1

Хм я вижу, где я был неправ сейчас. Спасибо за объяснение. Имеют смысл. – koffe14

0

obj имеет тип строки. Вы не можете проиндексировать его как объект в форме obj.texts. Вы разбор его с помощью $.parseJSON, а затем использовать объект возвращенный этот вызов:

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

Вашего 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>

1

1й вариант Вам не нужно ничего менять. Просто исправьте 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, так что для этого вам нужно сделать доступ к массиву.

enter image description here

+0

Вы просто проигнорировали его формат данных и удалили его массивы – mplungjan

+0

@mplungjan Он использует '' 'inside''', и вместо этого я использую' '' и '' '. Поэтому я дал ему решение о том, как он может получить доступ к объекту для объекта. Он хочет, чтобы такое решение, как Object, Object. Он хочет игнорировать нотацию «array». –

+0

У него есть вложенные массивы, которые вы только что удалили: '[{\" text \ ": [{' Он не знал, что ему нужна запись о строках – mplungjan

Смежные вопросы