Доступ имя объекта JSON в PHP

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

10
задан Gumbo 25 September 2009 в 19:09
поделиться

3 ответа

Я могу представить, что простейшая вещь нужно декодировать в ассоциативные массивы вместо объектов stdClass

$obj2 = json_decode( $json, true );

foreach ( $obj2['streets'] as $coords => $street )
{   
  echo $coords;
}
18
ответ дан 3 December 2019 в 15:22
поделиться

Учитывая этот фрагмент кода:

$json = '{"nickname":"xadoc","level":4,"loc":"Tulsa, OK, USA","score":122597,"money":29412.5,"streetNum":8,"streets":{"-91607259\/387798111":{"name":"Alam\u00e9da Ant\u00f3nio S\u00e9rgio","value":243,"type":1},"-91016823\/388182402":{"name":"Autoestrada do Norte","value":18304,"type":1},"-86897820\/399032795":{"name":"Autoestrada do Norte","value":12673,"type":1},"-973092846\/479475465":{"name":"19th Ave","value":7794,"type":1},"-974473223\/480054888":{"name":"23rd Ave NE","value":33977,"type":1}}}';
$obj2 = json_decode($json);
var_dump($obj2);

Вы получите:

object(stdClass)[1]
  public 'nickname' => string 'xadoc' (length=5)
  public 'level' => int 4
  public 'loc' => string 'Tulsa, OK, USA' (length=14)
  public 'score' => int 122597
  public 'money' => float 29412.5
  public 'streetNum' => int 8
  public 'streets' => 
    object(stdClass)[2]
      public '-91607259/387798111' => 
        object(stdClass)[3]
          public 'name' => string 'Alaméda António Sérgio' (length=25)
          public 'value' => int 243
          public 'type' => int 1
      public '-91016823/388182402' => 
        object(stdClass)[4]
          public 'name' => string 'Autoestrada do Norte' (length=20)
          public 'value' => int 18304
          public 'type' => int 1
      public '-86897820/399032795' => 
        object(stdClass)[5]
          public 'name' => string 'Autoestrada do Norte' (length=20)
          public 'value' => int 12673
          public 'type' => int 1
      public '-973092846/479475465' => 
        object(stdClass)[6]
          public 'name' => string '19th Ave' (length=8)
          public 'value' => int 7794
          public 'type' => int 1
      public '-974473223/480054888' => 
        object(stdClass)[7]
          public 'name' => string '23rd Ave NE' (length=11)
          public 'value' => int 33977
          public 'type' => int 1

Это означает, что вы можете перемещаться по улицам следующим образом:

foreach ( $obj2->streets as $id => $street ) {
    echo $id;
    var_dump($street);
    echo '<hr />';
}

Таким образом, для каждого $ street , вы получите соответствующий ключ в $ id - и данные в $ street .


Или вы можете напрямую получить к нему доступ следующим образом:

$street = $obj2->streets->{'-86897820/399032795'};
var_dump($street);

Что даст вам:

object(stdClass)[5]
  public 'name' => string 'Autoestrada do Norte' (length=20)
  public 'value' => int 12673
  public 'type' => int 1


Ваш $ obj2-> street является объектом, что означает, что вы не можете использовать доступ к синтаксису массива; это объясняет « Неустранимая ошибка: невозможно использовать объект типа stdClass как массив », если вы попытаетесь использовать это:

$obj2->streets['-86897820/399032795'];

Но свойства вашего объекта имеют довольно «странные» имена; что означает, что вы не можете этого сделать:

$obj2->streets->-86897820/399032795;

Что дает Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный '-', ожидание T_STRING или T_VARIABLE или '{' или '
(Я не могу найти в руководстве страницу, объясняющую этот синтаксис, и не могу назвать ее имя ... Если кто-нибудь знает ...)

11
ответ дан 3 December 2019 в 15:22
поделиться

Я не могу попробовать это прямо сейчас, но если вы выполните:

var_dump($obj2);

, вы сможете точно увидеть, как получить доступ к своей информации.

0
ответ дан 3 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: