Разбор строки JSON в Javascript - PullRequest
3 голосов
/ 08 ноября 2011

У меня есть некоторый JSON, который был передан из сервлета и хранится в xmlhttp.responseText.Я хочу разложить этот JSON, чтобы у меня могли быть значения данных, размера, стиля, имени и т. Д. Также я хочу, чтобы значение виджета находилось в отдельной переменной.

Вот JSON:

{
  "widget vlaue=2": {
    "debug": "on",
    "window": {
      "title": "Sample Konfabulator Widget",
      "name": "main_window",
      "width": 500,
      "height": 500
    },
  },
  "image": { 
    "src": "Images/Sun.png",
    "name": "sun1",
    "hOffset": 250,
    "vOffset": 250,
    "alignment": "center"
  },
  "text": {
    "data": "Click Here",
    "size": 36,
    "style": "bold",
    "name": "text1",
    "hOffset": 250,
    "vOffset": 100,
    "alignment": "center",
    "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
  }
}    

Я пробовал это:

obj = JSON.parse(xmlhttp.responseText); 

, но это не удалось.Я не мог найти ничего связанного с этим онлайн.Может кто-нибудь помочь мне с этим?

Ответы [ 2 ]

7 голосов
/ 08 ноября 2011

С json.org :

Чтобы преобразовать текст JSON в объект, вы можете использовать eval () функция. eval () вызывает компилятор JavaScript. Поскольку JSON является правильное подмножество JavaScript, компилятор правильно проанализирует текст и производить структуру объекта. Текст должен быть завернут в Паренс, чтобы избежать путаницы в синтаксисе JavaScript.

var myObject = eval ('(' + myJSONtext + ')');

Однако JSON.parse по-прежнему рекомендуется:

Функция eval очень быстрая. Тем не менее, он может скомпилировать и выполнить любая программа на JavaScript, поэтому могут возникнуть проблемы с безопасностью. Использование eval указывается, когда источник является доверенным и компетентным. Это много безопаснее использовать парсер JSON. В веб-приложениях через XMLHttpRequest, общение разрешено только к тому же источнику, что страница, так что ей доверяют. Но это может быть не компетентно. Если сервер не является строгим в своей кодировке JSON, или если это не скрупулезно проверить все свои входные данные, тогда он может доставить недопустимый текст JSON это может быть опасный сценарий. Функция eval будет выполнить скрипт, раскрыв его злобу.

Чтобы защититься от этого, следует использовать анализатор JSON. Парсер JSON распознает только текст JSON, отклоняя все сценарии. В браузерах это обеспечить собственную поддержку JSON, парсеры JSON также намного быстрее, чем Eval. Ожидается, что нативная поддержка JSON будет включена в следующий стандарт ECMAScript.

var myObject = JSON.parse (myJSONtext, reviver);

Возможно, что-то не так с вашим JSON, посетите jsonlint.com , чтобы получить бесплатный валидатор JSON для веб-базы.

5 голосов
/ 08 ноября 2011

Ваш JSON, который вы указали, НЕВЕРНЫЙ . Строка 9 содержит лишние ,, которых там быть не должно.

Вот JSFiddle, который работает без ,.

http://jsfiddle.net/ApDsP/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...