首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得JSON的值​?

如何获得JSON的值​?
EN

Stack Overflow用户
提问于 2022-09-03 13:16:24
回答 1查看 39关注 0票数 -1

我有三个示例JSON文件需要循环通过。我已经能做两件了,但第三件不见了。其思想是使用与前两种逻辑相同的逻辑来完成它。

示例1(销售标题)

控制器

代码语言:javascript
运行
复制
$data1 = '[{
      "T": {
          "HD": {
              "HD01": "1",
              "HD06": "20201006033942",
              "HD08": "3736803"
              }
          }
      },
      {
      "T": {
          "HD": {
              "HD01": "2",
              "HD06": "20201006035419",
              "HD08": "7523658"
              }
          }
      }]';

    $json = json_decode($data1, true);

    $head = collect($json)->map(function ($value) {
      return $value["T"]["HD"];
    });

    return view('dashboard.book.index', [
          'head' => $head
    ]);

叶片

代码语言:javascript
运行
复制
 <table class="table">
        <tr>
            <td> HD01</td>
            <td> HD02</td>
            <td> HD03</td>
            <td> HD04</td>
            <td> HD05</td>
            <td> HD06</td>
        </tr>
        @foreach ($head as $value)
            <tr>
                <td>{{ $value['HD01'] }}</td>
                <td>{{ $value['HD02'] ​​}}</td>
                <td>{{ $value['HD03'] }}</td>
                <td>{{ $value['HD04'] }}</td>
                <td>{{ $value['HD05'] }}</td>
                <td>{{ $value['HD06'] }}</td>
            </tr>
           
        @endforeach
    </table>

结果

标题

例2(销售细节)

控制器

代码语言:javascript
运行
复制
$data2 = '[{
    "T": {
      "SIEL" : {
              "SIE" : [
                  {
                      "sequenceNumber" : 0,
                      "itemId" : "3010",
                      "itemDescription" : "BAN VACCINE COSTELLET",
                      "unitAmount" : 29950,
                      "quantity" : 1,405,
                      "subTotalAmount" : 42080,
                      "discountAmount" : 0,
                      "totalAmount" : 42080
                     
                  },
                  {
                      "sequenceNumber" : 1,
                      "itemId" : "1010",
                      "itemDescription" : "CROLETA COOKIE",
                      "unitAmount" : 4800,
                      "quantity" : 0.605,
                      "subTotalAmount" : 2904,
                      "discountAmount" : 0,
                      "totalAmount" : 2904
                  }
              ]
          }
      }
      
  },
  {
  "T": {
    "SIEL" : {
            "SIE" : [
                {
                    "sequenceNumber" : 0,
                    "itemId" : "3010",
                    "itemDescription" : "BAN VACCINE COSTELLET",
                    "unitAmount" : 29950,
                    "quantity" : 1,405,
                    "subTotalAmount" : 42080,
                    "discountAmount" : 0,
                    "totalAmount" : 42080
                   
                },
                {
                    "sequenceNumber" : 1,
                    "itemId" : "1010",
                    "itemDescription" : "CROLETA COOKIE",
                    "unitAmount" : 4800,
                    "quantity" : 0.605,
                    "subTotalAmount" : 2904,
                    "discountAmount" : 0,
                    "totalAmount" : 2904
                }
            ]
        }
    }
    
}
  ]';


    $json = json_decode($data2, true);

    $details = collect($json)->map(function ($value) {
      return $value["T"]["SIEL"]["SIE"];
    });

     return view('dashboard.book.index', [
         'details' => $details
      ]);

叶片

代码语言:javascript
运行
复制
 <table class="table">
        <tr>            
            <td> sequenceNumber</td>
            <td> itemId</td>
            <td> itemDescription</td>
            <td> unitAmount</td>
            <td> quantity</td>
            <td> subTotalAmount</td>
            <td> discountAmount </td>
            <td> totalAmount </td>
        </tr>

        @foreach ($details as $items)
            @foreach ($items as $key => $value)
                <tr>                    
                    <td>{{ $value['sequenceNumber'] }}</td>
                    <td>{{ $value['itemId'] }}</td>
                    <td>{{ $value['itemDescription'] }}</td>
                    <td>{{ $value['unitAmount'] }}</td>
                    <td>{{ $value['quantity'] }}</td>
                    <td>{{ $value['subTotalAmount'] }}</td>
                    <td>{{ $value['discountAmount'] }}</td>
                    <td>{{ $value['totalAmount'] }}</td>
                </tr>
            @endforeach
        @endforeach
    </table>    

结果

详细信息

示例3(标题更详细)

代码语言:javascript
运行
复制
 $data3 = '[
    {
       "T":{
          "HD":{
             "HD01":"1",
             "HD02":"20201007",
             "HD03":"1001",
             "HD04":"15",
             "HD05":140,
             "HD06":"20201007062511",
             "HD07":"",
             "HD08":"3514401",
             "HD09":"PYG",
             "HD10":"PYG",
             "HD11":"00000 A000005",
             "HD12":"",
             "HD13":"",
             "HD14":"",
             "HD15":"",
             "HD16":"",
             "HD17":"Insufficient Funds",
             "HD18":"",
             "HD19":"",
             "HD20":"",
             "HD21":0,
             "HD22":"ICAE",
             "HD23":false,
             "HD24":false,
             "HD26":0
          },
          "SIEL":{
             "SIE":[
                {
                   "sequenceNumber":0,
                   "itemId":"1159",
                   "itemDescription":"BREAD FOR PANCHO",
                   "unitAmount":3500,
                   "quantity":0.001,
                   "subTotalAmount":4,
                   "discountAmount":0,
                   "totalAmount":4
                },
                {
                   "sequenceNumber":1,
                   "itemId":"2098",
                   "itemDescription":"HAPPY DAY CAKE",
                   "unitAmount":28950,
                   "quantity":0.001,
                   "subTotalAmount":29,
                   "discountAmount":0,
                   "totalAmount":29
                }
             ]
          }
       }
    },
    {
       "T":{
          "HD":{
             "HD01":"1",
             "HD02":"20201007",
             "HD03":"1001",
             "HD04":"15",
             "HD05":141,
             "HD06":"20201007063358",
             "HD07":"",
             "HD08":"3514401",
             "HD09":"PYG",
             "HD10":"PYG",
             "HD11":"0010580000125",
             "HD12":"",
             "HD13":"",
             "HD14":"",
             "HD15":"",
             "HD16":"",
             "HD17":"",
             "HD18":"",
             "HD19":"",
             "HD20":"",
             "HD21":16100,
             "HD22":"ICAE",
             "HD23":false,
             "HD24":false,
             "HD26":-47
          },
          "SIEL":{
             "SIE":[
                {
                   "sequenceNumber":0,
                   "itemId":"1110",
                   "itemDescription":"STICK WITHOUT ANISE",
                   "unitAmount":9100,
                   "quantity":1.115,
                   "subTotalAmount":10147,
                   "discountAmount":0,
                   "totalAmount":10147                   
                },
                {
                   "sequenceNumber":1,
                   "itemId":"7841503001513",
                   "itemDescription":"TRIPACK CRACKER CLASS",
                   "unitAmount":6000,
                   "quantity":1,
                   "subTotalAmount":6000,
                   "discountAmount":0,
                   "totalAmount":6000                 
                   }
                }
             ]
          }
       }
    }
 ]';

    $json = json_decode($data3, true);

     $tickets = collect($json)->map(function ($value) {
              return ????
    });

因此,我不知道如何将其放入返回中,以便将数据作为一个组合表发送并遍历。

它应该是怎样的例子:

表格

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-04 12:33:14

一种可能的解决方案是从JSON字符串中获取所有键,并将它们作为一个单独的变量存储,然后对实际数据执行类似的操作。

例如,要从JSON获取所有密钥,可以执行以下操作:

代码语言:javascript
运行
复制
$keys =
    collect(json_decode($data)[0]->T->HD)
    ->merge(collect(json_decode($data)[0]->T->SIEL->SIE[0]))
    ->keys();

它所做的就是生成一个array,它只包含您感兴趣的JSON键,您想要对这些键进行简单的迭代。

代码语言:javascript
运行
复制
@foreach ($keys as $key)
    {{ $key }}
@endforeach

至于您的数据,这将是一个类似的过程,但是我们只关注JSON的值,而不是键。

代码语言:javascript
运行
复制
$data = collect(json_decode($data))->map(function ($element) {
    return collect($element->T->HD)->merge(collect(['SIE' => $element->T->SIEL->SIE]));
});

这将导致在每个集合元素的顶层使用所有HD前缀键和SIE元素的子集合(有点扁平)的数据集合。

代码语言:javascript
运行
复制
[
  "HD01" => 1,
  "HD02" => 2,
  ...
  "SIE" => [
    [
      "sequenceNumber":0,
      "itemId":"1110",
      "itemDescription":"STICK WITHOUT ANISE",
      ...
    ],
    ...
  ]
]

从这里开始,它应该是一个直接遍历刀片视图中的data来输出它的过程。

一个函数示例这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73592528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档