Разбор JSON пропущенных кавычек на имя - PullRequest
2 голосов
/ 06 июня 2011

Можно ли проанализировать JSON, если в имени отсутствуют двойные кавычки? JSON исходит от Google и имеет вид:

{e:"Data",b:"Data",f:"Data"}

Я не могу сообщить Google, что их JSON недействителен, потому что он, вероятно, недействителен по причине их проприетарной системы. При использовании json_decode () он возвращает NULL.

Есть ли у них какие-либо библиотеки, способные анализировать JSON в этом формате?

Ответы [ 3 ]

5 голосов
/ 06 июня 2011

JSON является подмножеством YAML, поэтому любой допустимый синтаксис JSON является допустимым синтаксисом YAML.Однако YAML не требует кавычек вокруг имен свойств, поэтому парсер YAML справится с этим контентом.

Мой предпочтительный парсер YAML - это компонент YAML Symfony , который можно использовать какследует:

<?php

include('yaml/lib/sfYaml.php');

var_dump(sfYaml::load('{e:"Data",b:"Data",f:"Data"}'));

Вывод:

array(3) {
  ["e"]=>
  string(4) "Data"
  ["b"]=>
  string(4) "Data"
  ["f"]=>
  string(4) "Data"
}
3 голосов
/ 02 октября 2012

// Сериализация нативного объекта Javascript в JSON.Процитировать ключевые имена.key => 'key'

function fix_json( $j ){
  $j = trim( $j );
  $j = ltrim( $j, '(' );
  $j = rtrim( $j, ')' );
  $a = preg_split('#(?<!\\\\)\"#', $j );
  for( $i=0; $i < count( $a ); $i+=2 ){
    $s = $a[$i];
    $s = preg_replace('#([^\s\[\]\{\}\:\,]+):#', '"\1":', $s );
    $a[$i] = $s;
  }
  //var_dump($a);
  $j = implode( '"', $a );
  //var_dump( $j );
  return $j;
}

Пример:

 $json = '{e:"Data",b:"Data",f:"Data"}';
 echo fix_json($json);

Выход:

{"e":"Data","b":"Data","f":"Data"}
0 голосов
/ 06 июня 2011

Действительно, это выглядит недействительным.Возможно, вы захотите подумать о добавлении кавычек, используя фрагмент нестандартного кода PHP.

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