2014-06-25 6 views
2
{"general":{ 
"round-corner":"0", 
"border-stroke":"2", 
"background-color":"#ffffff" 
} 
} 

У меня есть эта строка json, я знаю, что имена переменных php не поддерживают тире. Так что делать в этом случае?php json decode с переменными, содержащими дефисы

+1

насчет только изменяя их до декодирования строки? str_replace() http://www.php.net/manual/en/function.str-replace.php – jtheman

+0

Те будут отображаться как ключи в массиве или свойствах объекта. Вы также используете экстракт на этом массиве? – mishu

ответ

3

Формат массива можно использовать следующим образом. Дефисные клавиши будут работать.

<?php 

$json = '{"general":{ 
"round-corner":"0", 
"border-stroke":"2", 
"background-color":"#ffffff" 
} 
}'; 

$array = json_decode($json, true); 

echo $array['general']['border-stroke']; // prints 2 

?> 

Вот demo

+0

, так что если есть другой под-ключ «type» to «background-color», больно сделайте это, чтобы получить его: '$ array ['general'] ['background-color'] ['type']'? – Xsmael

+0

@Xsmael Это будет .. –

+0

спасибо! последнее, если есть только один ключ с тире во всем json-объекте, заставит ли json_decode() вернуть массив (например, выше) вместо объекта? – Xsmael

8

Когда имеешь дело с действительным JSON, вам не нужно делать ничего особенного, чтобы использовать результат в PHP до тех пор, пока вы не используете extract().

Admiditly выглядит чище, чтобы json_decode возвращал массив здесь, как предлагает Jay Bhatt, но вы также можете использовать обычный объект в качестве возврата (который является экземпляром stdclass).

Свойства возвращаемого объекта могут быть практически любыми. Вам просто нужно использовать имя свойства как php-строку вместо жестко закодированного литерала.

$obj->{'a sentence with spaces and umlauts äüö is valid here'}

<?php 

$json = <<<JSON 
{"general":{ 
"round-corner":"0", 
"border-stroke":"2", 
"background-color äü??$%§":"#ffffff" 
} 
} 
JSON; 

$obj = json_decode($json); 

$keyName = "round-corner"; 
var_dump($obj->general->{'round-corner'}); 
var_dump($obj->general->$keyName); 
var_dump($obj->general->{'background-color äü??$%§'}); 

Result

+0

спасибо! это намного проще – Xsmael

+0

Редакторы: Рангад сознательно включал лишних символов в тег background-color. Не редактируйте их. – Kenster

+0

Какая польза от этого «ä? ?? $% §»? – Xsmael