Как мне разобрать эту недопустимую строку JSON в jQuery? - PullRequest
2 голосов
/ 20 мая 2010

Я ищу доступ к различным битам данных в этом атрибуте данных:

<div class="location" data="{id: 4, point: {lng: -71.413364, lat: 41.673681}, category: 'Restaurant'}">

Атрибут данных, конечно, достаточно прост в jQuery. Но строка кажется нестандартной или недопустимой формой JSON. Я пробовал JSON.parse (), а также базовый метод JS для разделения массива. Судя по всему, это просто неверно сериализованная строка.

Нужно ли переформатировать строку данных? (это не от меня, и оно используется другими процедурами, которые я бы не хотел нарушать, так что ...)

Ответы [ 3 ]

6 голосов
/ 20 мая 2010

Обычно я бы сказал, что это опасно (и на самом деле я скажу это сейчас), но попробуйте:

var decoded;  eval("decoded = " + $('div.location').attr('data'));

Это недопустимый JSON, потому что метки не указаны.

1 голос
/ 20 мая 2010

JSON неверно отформатирован для анализа. Это работает , если вы переформатируете так:

var obj = jQuery.parseJSON('{"id": 4, "point": {"lng": -71.413364, "lat": 41.673681}, "category": "Restaurant"}');

$("#blah").text(obj.point.lng);
1 голос
/ 20 мая 2010

Причина, по которой вы получаете ошибку разбора, заключается в том, что имена свойств не указаны правильно. Это работает, хотя:

var obj = eval("(" + "{id: 4, point: {lng: -71.413364, lat: 41.673681}, category: 'Restaurant'}" + ")");

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '*' * '' '', чтобы избежать обработки '1005 * как оператора блока

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