如何访问JSON中的嵌套对象?

时间:2019-02-11 17:31:15

标签: php json laravel

这是我的控制器:

public function index(Request $request)
    {
        $soapClient = new \SoapClient('http://187.32.223.233/UraIntegrada/Siacon/ConsorcioServices.asmx?WSDL');
        $params = array(
                'sGrupo' => "0".$request->sGrupo,
                'iCota' => $request->iCota,
                'iIdERP' => $request->iIdERP
        );
        $response = $soapClient->ROS_ExtratoContaCorrente($params);
        foreach ($response as $dados) {
            $dado = json_decode(json_encode($dados), true);
        }
        // return $dado;
        // die();

        return view('layouts.extrato', compact('dado'));
    }

这就是我如何在刀片上更新数据:

<div class="col">
     Nome: {{ $dado['NOME-CLIENTE'] }}<br>
     Rua: {{ $dado['NOME-LOGRADOURO'] }}, Nº{{ $dado['NUMERO-LOGRADOURO'] }}<br>
     Bairro: {{ $dado['BAIRRO'] }}<br>
     Cidade: {{ $dado['CIDADE'] }} - UF: {{ $dado['UF'] }}<br>
     CEP: {{ $dado['CEP'] }}<br>
     Telefone: {{ $dado['NUMERO-TELEFONE'] }}
 </div>

如何使用Laravel访问JSON嵌套对象?

可以通过$ dados ['NOME-CLIENTE']访问,但不知道如何访问下一个嵌套对象'PARCELAS-PAGAS`-> PARCELA-PAGA-> NUMERO-PARCELA

{
  "NOME-CLIENTE": "JANE DOE",
  "CODIGO-GRUPO": "06275",
  "NUMERO-COTA": 45,
  "NOME-LOGRADOURO": "JUNIOR STREET",
  "NUMERO-LOGRADOURO": "519",
  "BAIRRO": "PRESIDENTE ROOSEVELT",
  "CIDADE": "UBERLANDIA",
      "PARCELAS-PAGAS": {
           "PARCELA-PAGA": [
                {
                 "NUMERO-PARCELA": 17,
                 "DATA-VENCIMENTO": "20190108",
                },

现在,我想访问“ NUMERO-PARCELA”节点,但不知道如何在Laravel中进行操作

2 个答案:

答案 0 :(得分:1)

PARCELA-PAGA是一个数组。您需要遍历它。

例如:

$json = '{
  "NOME-CLIENTE": "JANE DOE",
  "CODIGO-GRUPO": "06275",
  "NUMERO-COTA": 45,
  "NOME-LOGRADOURO": "JUNIOR STREET",
  "NUMERO-LOGRADOURO": "519",
  "BAIRRO": "PRESIDENTE ROOSEVELT",
  "CIDADE": "UBERLANDIA",
  "PARCELAS-PAGAS": {
        "PARCELA-PAGA": [
            {
                "NUMERO-PARCELA": 17,
                "DATA-VENCIMENTO": "20190108"
            }
        ]
  }
}';

$dado = json_decode($json, true); 

$parcelaPaga = $dado['PARCELAS-PAGAS']['PARCELA-PAGA']; 

foreach($parcelaPaga as $parcela) {
    echo $parcela['NUMERO-PARCELA'] . PHP_EOL; 
}

这是一个example,可以玩。

答案 1 :(得分:1)

如果整个对象是一个关联数组,它似乎来自您的示例代码,那么您将像这样访问属性:

$dado["PARCELAS-PAGAS"]["PARCELA-PAGA"][0]["NUMERO-PARCELA"]

[0]索引将使您获得“ PARCELA-PAGA”数组中的第一项(此位是数字数组,而不是关联数组)。

这是一个可运行的演示:http://sandbox.onlinephpfunctions.com/code/54097b7213fbfe598c67a2c08b43d1e72ba2ede6

当然,如果您希望可能有多个项目,则最好使用循环依次获取每个项目,假设您想全部获取它们。

P.S。忘了它是JSON,一旦将它反序列化为一个变量,它就可以像其他任何PHP变量一样工作。一旦变量变成PHP变量,您就可以始终使用var_dump()来查看其结构。