Как получить доступ к тексту в этом JSON с помощью JSON? [Дубликат]

Подкатегория Java 8 теперь поддерживается на Android Studio. Просто сделайте корректировки исходной и целевой совместимости из окна ниже:

Файл -> Структура проекта

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

https://developer.android.com/studio/write/java8-support.html

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

3 ответа

Я бы предположил, что самое простое - декодировать в ассоциативные массивы вместо объектов stdClass

$obj2 = json_decode( $json, true );

foreach ( $obj2['streets'] as $coords => $street )
{   
  echo $coords;
}
15
ответ дан Peter Bailey 28 August 2018 в 13:57
поделиться
  • 1
    Использование ассоциативных массивов "json_decode ($ json, true); & quot; дал мне эту ошибку "Предупреждение: неверный аргумент, предоставленный для foreach () & quot; но «foreach» ($ obj2- & gt; улицы как $ coords = & gt; $ street) & quot; работал как шарм! : D Большое спасибо! Также благодаря Gumbo для редактирования кода. Stackoverflow действительно здорово! – xadoc 25 September 2009 в 20:40
  • 2
    Ха-ха, я предложил переключиться на ассоциативные массивы, а затем быстро забыл использовать этот синтаксис в своем фрагменте. Ответ обновлен. Спасибо за уловку;) – Peter Bailey 25 September 2009 в 21:02

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

var_dump($obj2);

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

0
ответ дан jeroen 28 August 2018 в 13:57
поделиться
  • 1
    Кроме того, с Firebug у вас есть действительно хороший JSON-explorer & quot; где вы можете видеть и перемещаться по всей структуре и данным. – xadoc 25 September 2009 в 20:44

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

$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 - это объект, что означает, что вы не можете использовать доступ к синтаксису массива; это объясняет «Fatal error: Cannot use object of type stdClass as array», если вы попытаетесь использовать это:

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

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

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

Что дает Parse error: syntax error, unexpected '-', expecting T_STRING or T_VARIABLE or '{' or '$'

И что:

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

Что также дает Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting T_STRING or T_VARIABLE or '{' or '$'

К счастью, вы можете использовать {} для своего рода «защиты» имени ваших ключей и получить все, что работает ;-) (я не могу найти страницу в руководстве, которая объясняет этот синтаксис, и не дает его имя ... Если кто-нибудь знает ...)

11
ответ дан Pascal MARTIN 28 August 2018 в 13:57
поделиться
  • 1
    foreach ($ obj2- & gt; улицы как $ id = & gt; $ street) отсутствовала. Спасибо за помощь и объяснение! – xadoc 25 September 2009 в 20:43
  • 2
    спасибо, что это сработало для меня ... – Deepak Chawla 30 September 2017 в 04:53
Другие вопросы по тегам:

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