2017-01-09 6 views
1

Ich habe folgende Zeichenfolge, die ich aus einem API-Aufruf erhalten:Convert PHP Zeichenfolge JSON Array (key: value)

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

Ich mag würde es zu einer JSON Array konvertieren; Also, ich habe json_encode versucht(), aber es gibt die folgende Zeichenfolge:

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

Könnten Sie bitte mir raten, wie man das erreichen, was ich will.

Dank

+1

Sie sollten JSON_decode() ausführen, da Ihre Zeichenfolge JSON enthält. Verwenden Sie die Option json decode, um als Array anstelle von \ StdClass zu analysieren. (OFC brauchen Sie die richtigen Zeilentrennzeichen und Symbol-Escapes). –

+1

Woher kommt diese Saite? Ohne zu wissen, welches Format das sein sollte, gibt es wenig Strategie, um es zu parsen und zu bewerten ... – arkascha

+1

@YuriBlanc Diese Zeichenfolge ist _nicht_ gültige JSON. – arkascha

Antwort

3

Die bevorzugte Art und Weise würde den Dienst werden zu beeinflussen, die Ihnen diese Art von Strings gibt ein gültiges JSON-String zu erhalten (wenn es möglich ist).
Im Moment, wenn es um die Anpassung etwas "willkürlich" String JSON Notation Format ist und weiterhin einen JSON "Array" erhielt den folgenden Ansatz mit preg_replace und json_decode Funktionen nutzen:

$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); 

Der Ausgang:

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

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

Um eine JSON Zeichenfolge, die ein Array zu erhalten:

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

Der Ausgang:

+0

Genau das, was ich erreichen möchte. Vielen Dank für Ihre Hilfe – Alladin

+0

@Alladin, gerne geschehen – RomanPerekhrest

+1

Dies scheint nicht mit dem 'a =" ... "' Teil zu behandeln, aber es ist konstant, eine einfache 'mb_substr()' Aufruf sollte tun. –