2013-07-28 3 views
1

Я пытаюсь выяснить, что PHP массив получает вас этот JSONпреобразования JSON с квадратными скобками массив PHP

{ 
    "sEcho": 67, 
    "iTotalRecords": "4075", 
    "iTotalDisplayRecords": "4075", 
    "aaData": [ 
    [ 
     "215", 
     "Manaus", 
     "BRA", 
     "Amazonas", 
     "1255049" 
    ], 
    [ 
     "216", 
     "Belém", 
     "BRA", 
     "Pará", 
     "1186926" 
    ], 
    [ 
     "217", 
     "Guarulhos", 
     "BRA", 
     "São Paulo", 
     "1095874" 
    ], 
    [ 
     "218", 
     "Goiânia", 
     "BRA", 
     "Goiás", 
     "1056330" 
    ], 
    [ 
     "219", 
     "Campinas", 
     "BRA", 
     "São Paulo", 
     "950043" 
    ], 
    [ 
     "220", 
     "São Gonçalo", 
     "BRA", 
     "Rio de Janeiro", 
     "869254" 
    ], 
    [ 
     "221", 
     "Nova Iguaçu", 
     "BRA", 
     "Rio de Janeiro", 
     "862225" 
    ], 
    [ 
     "222", 
     "São Luís", 
     "BRA", 
     "Maranhão", 
     "837588" 
    ], 
    [ 
     "223", 
     "Maceió", 
     "BRA", 
     "Alagoas", 
     "786288" 
    ], 
    [ 
     "224", 
     "Duque de Caxias", 
     "BRA", 
     "Rio de Janeiro", 
     "746758" 
    ] 
    ] 
} 

Я пытаюсь это

$array = array(
    "foo" => "more foo", 
    "st" => "bar", 
    "ty" => "stuff", 
    "multi" => array(
      "array" => "foo", 
      "the" => "stuff" 
     ), 
     array(array(
      "array" => "foo", 
      "the" => "stuff" 
     )), 
     array(array(
      "array" => "foo", 
      "the" => "stuff" 
     )), 
     array(array(
      "array" => "foo", 
      "the" => "stuff" 
     )) 
    ); 
echo "<pre>"; 
print_r(json_encode($array)); 
echo "</pre>"; 

но мой JSON имеет фигурную скобку

{"foo": "more foo", "st": "bar", "ty": "stuff", "multi": {"array": "foo", "the": "stuff "}," 0 ": [{" массив ":" Foo " "от": "материал"}], "1": [{" обр ау ":" Foo», "от": "вещи"}], "2": [{ "массив": "Foo", "от": "вещи"}]}

Как может я исправьте мой массив, чтобы создать json ?.

ответ

3

У вас слишком много массивов глубины, и вы не должны указывать ключ. В массивах PHP, если вы задаете строковый ключ и JSON кодируете его, он будет создавать объект, а не массив.

$array = array(
    "foo" => "more foo", 
    "st" => "bar", 
    "ty" => "stuff", 
    "multi" => array(
     array(
      '215', 
      'Manaus', 
      'BRA' 
     ), 
     array(
      '216', 
      'Belém', 
      'BRA' 
     ), 
     array(
      '217', 
      'Guarulhos', 
      'BRA' 
     ) 
    ) 
); 

echo json_encode($array); 

Выходов:

{ 
    "foo": "more foo", 
    "st": "bar", 
    "ty": "stuff", 
    "multi": [ 
     [ 
      "215", 
      "Manaus", 
      "BRA" 
     ], 
     [ 
      "216", 
      "Belém", 
      "BRA" 
     ], 
     [ 
      "217", 
      "Guarulhos", 
      "BRA" 
     ] 
    ] 
} 
2

Используйте числовые индексы! Все, что имеет строку в качестве ключа, должно создавать фигурные скобки, потому что это единственный способ иметь эти ключи в javascript.

json_encode(array("hello", "world") 

["hello", "world"] 
0

У вас есть фигурные скобки, потому что вы указали как ключи, так и значения, вам нужно будет указать только значения.

$array = array(
    "foo" => "more foo", 
    "st" => "bar", 
    "ty" => "stuff", 
    "multi" => array(
       "foo", 
      "stuff" 
     ), 
     array(array(
       "foo", 
      "stuff" 
     )), 
     array(array(
      "foo", 
      "stuff" 
     )), 
     array(array(
       "foo", 
      "stuff" 
     )) 
    ); 
1

индексы JSON массив должны быть числовыми. Любой не численный индекс будет преобразован в объект json. Вот почему он отображается в фигурные скобки.

О вашем первоначальном вопросе следующий код PHP: header («Content-type: application/json»); header («Access-Control-Allow-Origin», «*»); header («Access-Control-Allow-Methods: POST, OPTIONS»); header ("Access-Control-Allow-Headers: Content-Type"); header ("Access-Control-Allow-Credentials: false"); header («Access-Control-Max-Age: 60»);

include "./inc/funclib.inc.php"; 
$array = array (
    "sEcho" => 67, 
    "iTotalRecords" => "4075", 
    "iTotalDisplayRecords" => "4075", 
    "aaData" => array (
     array ("215", "Manaus", "BRA", "Amazonas", "1255049"), 
     array ("216", "Belem", "BRA", "Para¡", "1186926"), 
     array ("217", "Guarulhos", "BRA", "Sao Paulo", "1095874") 
    )); 

echo jsonIndent(json_encode($array)); 

возвращает этот выход:

{ 
    "sEcho":67, 
    "iTotalRecords":"4075", 
    "iTotalDisplayRecords":"4075", 
    "aaData":[ 
    [ 
     "215", 
     "Manaus", 
     "BRA", 
     "Amazonas", 
     "1255049" 
    ], 
    [ 
     "216", 
     "Belem", 
     "BRA", 
     "Para\u00a1", 
     "1186926" 
    ], 
    [ 
     "217", 
     "Guarulhos", 
     "BRA", 
     "Sao Paulo", 
     "1095874" 
    ] 
    ] 
} 

который выглядит как то, что вы ищете. Надеюсь, это поможет :-)

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