2013-04-28 2 views
0

JSON.stringify (value) не может обрабатывать чуть большее значение. Это делает ошибку «переполнение стека». Есть ли обходной путь?json2.js JSON.stringify() генерирует переполнение стека при обработке небольшого большего значения

json2.js от https://github.com/douglascrockford/JSON-js

Я бег моих программ JavaScript на Windows, DOS окна через cscript.exe (WSH), который является JScript версии 5.8 на Windows 7 и Windows 8.

I не может найти способ использовать, как говорят, встроенный JSON в JScript v5.8. Итак, я включаю json2.js, и он работает! Работает, но не очень хорошо. JSON.stringify (mydata) генерирует «переполнение стека», когда mydata является чуть более крупной структурой.

Способ включения json2.js: Открыть json2.js, прочитать весь json2.js в строку ss, eval (ss). Затем JSON становится доступным, и он работает.

Кстати, я не вижу JSON в cscript.exe JScript v5.8, как его включить?

+0

Можете ли вы пояснить «немного больше»? Например, вы могли бы включить образец кода, который генерирует ошибку переполнения стека? – tjameson

+0

Что-то вроде этого - ячейка массива. Массив имеет около 200 таких ячеек. JSON.stringify (слова.forth [2]) ==> {"name": "end-code", "vid": "four", "wid": 2, "creater": ["code"], «немедленный»: true, «compileonly»: true, «hel p»: «end-code \ t (-) Заменить новое кодовое слово.»} Если попытаться выровнять весь массив, то JSON .stringify (words.forth) ==> Переполнение стека. Если попытаться выровнять меньший массив, то это нормально, JSON.stringify (words.wmi) ==> [0, {"name": "t/c", "vid": "wmi", " wid ": 1," creater ": [" colon "," (create) "]," help ":" t/c \ t (- \ "target-compu ter \") wmi.f tools '. .. snip .... –

ответ

1

Сценарий, доступный через WScript/CScript, используется в IE7, поэтому нет объекта JSON, который вы уже нашли (и никоим образом не разрешить его).

Скорее всего, причиной переполнения стека является попытка сериализации рекурсивной структуры вместо правильного дерева. Я не верю, что JSON2.js поддерживает такие случаи. Простая структура с самоналожением ниже (нормальная JSON.stringify не работает)

var node = { a:"text"}; 
node.next = node; 
+0

Я попытался и да! JSON.stringify (node) также генерирует «переполнение стека». Поэтому я сначала изучу свои данные, спасибо вам очень много! –