2014-01-13 2 views
1

У меня проблема с разбором строки json.как разобрать недопустимую строку json (с шестнадцатеричными значениями)

Вот строка (проблемная часть):

{ 
    "type":"meaning", 
    "terms":[ 
    { 
     "type":"text", 
     "text":"some value.", 
     "language":"ru" 
    }, 
    { 
     "type":"url", 
     "text":"\x3ca href\x3d\x22http://readmas.ru/arts/bodyart/znachenie-tatuirovok.-chast-i.html\x22\x3…ttp://readmas.ru/arts/bodyart/znachenie-tatuirovok.-chast-i.html\x3c/a\x3e", 
     "language":"ru" 
    }] 
}, 

Примечание:
Эти функции не работает для меня:

  1. строку replace.
  2. JSON.parse.
  3. $.parseJSON.
+0

Это выглядит нормально, пожалуйста, расскажите нам больше о проблеме. –

+0

Я на самом деле разрабатываю расширение chrome, и эта строка возвращается мне в словаре Google. Я не могу изменить способ выполнения запроса (потому что это единственный способ получить ответ от Google). Вот запрос: –

+2

Нет обходных решений, за исключением, может быть, поиска и замены самой строки, поскольку у вас есть недопустимый JSON, и он не может быть проанализирован. – adeneo

ответ

4

В отличии от JavaScript, то JSON notation поддерживает только два байта \uNNNN управляющих последовательностями, а не \xNN последовательностей. Попробуйте это:

var cleaned = input.replace(/\\x([0-9a-f]{2})/g, '\\u00$1'); 
var output = $.parseJSON(cleaned); 
console.log(output); 

Demonstration

Кроме того, для того, чтобы сделать эту демонстрацию работы, я должен был сделать несколько других изменений в вашей строки, которые я думаю, что это просто результат того, как вы отформатировали вопрос здесь :

  • Завершена последовательность \xNN побег, что была нарушена, когда в середине строки (\x3…ttp).
  • Удалено запятая в конце объектного литерала.

В любом случае, было бы лучше, если бы вы могли сделать свою услугу (или что-то еще, предоставив вам этот файл), предоставить вам действительный JSON вместо этого.

+0

спасибо! работает на меня –

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