2017-01-09 2 views
1

У меня есть следующие строки, я получаю от вызова API:Преобразования PHP строка JSON массива (ключ: значение)

a = "{ 
     "option1"=>"Color", 
     "attribute1"=>{0=>"Black", 1=>"White",2=>"Blue"}, 
     "option2"=>"Size", 
     "attribute2"=>{0=>"S", 1=>"L",2=>"M"} 
}" 

Я хотел бы, чтобы преобразовать его в массив JSON; Итак, я попытался json_encode(), но он возвращает следующую строку:

""{\"option1\"=>\"Color\",\"attribute1\"=>{0=>\"Black\", 1=>\"White\",2=>\"Blue\"},\"option2\"=>\"Size\",\"attribute2\"=>{0=>\"S\", 1=>\"L\",2=>\"M\"}}"" 

Не могли бы вы сообщить мне о том, как добиться того, чего я хочу.

Благодаря

+1

Вы должны сделать JSON_decode(), так как ваша строка i'ts JSON. Используйте json-декодирование для анализа в качестве массива вместо \ StdClass. (OFC вам нужны правильные разделители строк и экраны символов). –

+1

Откуда взялась эта строка? Не зная, какой формат должен быть, есть небольшая стратегия для анализа и оценки ... – arkascha

+1

@YuriBlanc Эта строка не является действительной JSON. – arkascha

ответ

3

Предпочтительный способ будет влиять на сервис, который дает вам такой вид строки, чтобы получить правильную строку JSON (если это возможно).
На данный момент, если речь идет о адаптации некоторых «произвольную» строку в формате JSON нотации и далее получать «массив» JSON использовать следующий подход с preg_replace и json_decode функции:

$json_str = '{ 
     "option1"=>"Color", 
     "attribute1"=>{0=>"Black", 1=>"White",2=>"Blue"}, 
     "option2"=>"Size", 
     "attribute2"=>{0=>"S", 1=>"L",2=>"M"} 
}'; 

// To get a 'pure' array 
$arr = json_decode(preg_replace(["/\"?(\w+)\"?=>/", "/[\r\n]|\s{2,}/"], ['"$1":', ''], $json_str), true); 
print_r($arr); 

Выход:

Array 
(
    [option1] => Color 
    [attribute1] => Array 
     (
      [0] => Black 
      [1] => White 
      [2] => Blue 
     ) 

    [option2] => Size 
    [attribute2] => Array 
     (
      [0] => S 
      [1] => L 
      [2] => M 
     ) 
) 

Для того, чтобы получить строку JSON, представляющий массив:

$json_arr = json_encode($arr); 
print_r($json_arr); 

выход:

{"option1":"Color","attribute1":["Black","White","Blue"],"option2":"Size","attribute2":["S","L","M"]} 
+0

Точно то, чего я хочу достичь. спасибо за вашу помощь – Alladin

+0

@Alladin, добро пожаловать – RomanPerekhrest

+1

Это, похоже, не обрабатывает часть 'a =" ... ", но, она постоянна, должен выполняться простой вызов' mb_substr(). –