2013-04-27 3 views
1

У меня есть тысячи текстовых файлов в формате javascript (не JSON), как в следующем формате; Поскольку они не json, функция json_decode не работает с ними. Погуглить не был очень полезным, в то время как каждая статья я нашел о PHP для JSO :(Объект Javascript (строковый формат) в PHP Array

{ 
guid:205, 
     data:{something:"value", 
      anotherthing :0, 
      thingy: "another value"}, 
     anotherdata:[[563, "value", 1], 
      [564, "value2", 5], 
      [565, "value3", 125]], 
     onemore:["key", "value"] 
} 

Мне нужно, чтобы достичь этого значения с PHP, но не смог найти решение :(

$str = ??? /any function, class etc. 
echo $str->data->thingy; // another value; 

или

echo $str['anotherdata'][2][1] // value3; 

Любая идея?

+0

Посмотрите на подобные проблемы. Это не проблема, которую можно просто решить с помощью регулярного выражения. http://stackoverflow.com/questions/4843746/regular-expression-to-add-double-quotes-around-keys-in-javascript –

+0

Как код js, который вы дали не json? – Achshar

+0

Хорошо, может быть, это нотация '[]' array? – Achshar

ответ

-2

ли вы в курсе, что ваш пример текст является своего рода JSON Строка? Вы можете конвертировать json_decode.

Пожалуйста, см http://php.net/json_decode

+0

Вы читали начало вопроса? * «У меня тысячи текстовых файлов с форматированным javascript-объектом (а не JSON), например, следующий формат: поскольку они не json, функция json_decode не работает с ними.» * –

+1

['json_decode 'documentation] (http://php.net/json_decode) говорит, что JSON должен иметь двойные кавычки своих объектов. Извините, но' json_decode' не будет работать. – michaelb958

+0

@FelixKling Не могли бы вы объяснить различия между строкой JSON и javascript object formatted text file –

2

Может быть, вы могли бы разобрать простой текст для того, чтобы исправить строку, добавив непринятых двойные кавычки в ключах объектов. Что-то вроде:

$str = '{ 
guid:205, 
    data:{something:"value", 
     anotherthing :0, 
     thingy: "another value"}, 
    anotherdata:[[563, "value", 1], 
     [564, "value2", 5], 
     [565, "value3", 125]], 
    onemore:["key", "value"] 
}'; 

$str = preg_replace('/(\w+)\s{0,1}:/', '"\1":', str_replace(array("\r\n", "\r", "\n", "\t"), "", $str)); 
$array_data = json_decode($str); 

Это исправило бы неправильную строку JSON, и вы сможете ее декодировать. Плохая вещь может быть в случае, если некоторые из значений элементов содержат текст со словом, за которым следует двоеточие (т. Е. Anyword :)

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