当前位置: 首页 > 知识库问答 >
问题:

我如何访问PHP中的JSON元素,比如数组对象?

廖招
2023-03-14

通过触发这个Webhook,我收到一个订单对象,当我在电子邮件中输出它时,它如下所示:

数组{“id”:1154,“parent_id”:0,“status”:“pending”,“currency”:“eur”,“version”:“3.2.3”,“prices_include_tax”:true,“date_created”:{“date”:“2017-12-15 15:58:42.000000”,“timezone_type”:1,“timezone_type”:1,“timezone_type”:“+00:00”},“discount_total”:“0”,“discount_tax”:“0”,“shipping_total”:“0”,“shipping_tax”:“0”,“cart_tax”:“0”,“total”:“6.50”,“total_tax”:“0”,“customer_id”:0,“order_key”:“wc_order_5a33f1321ba43”,“billing”:{“first_name”:“peter”,“last_name”:“html" target="_blank">parker”,“company”:“address_1”:“baker str”,“address_2”:“2”,“city”:“london”,“state”thing@gmail.com“,”电话“:”01627423“},”运输“:{”first_name“:”彼得“,”last_name“:”帕克“,”公司“:”“,”地址_1“:”贝克str.“,”地址_2“:”2“,”城市“:”伦敦“,”州“:”“,”邮政编码“:”50668“,”国家“:”de“},”payment_method“:”cod“,”payment_method_title“:”bei abholung“,”transaction_id“:”“customer_ip_address”:“...”,“/5.0(Macintosh;intel mac os x 10_132)AppleWebKit/537.36(khtml,like gecko)Chrome/blabla Safari/537.36“,”created_via“:”checkout“,”customer_note“:”“date_completed”:null,“date_payed”:null,“cart_hash”:“be97db19eba58864b9166961ce22a706”,“number”:“1154”,“meta_data”:[{“id”:4731,“key”:“:”_shipping_title“,”value“:”1“}],”line_items“:{”18“:{}},”tax_lines“:[],”shipping_lines“:{”19“:{}},”fee_lines“:[],”coupon_lines“:[]}

您能告诉我访问这个JSON元素的可能性吗,这样我就可以从$order对象的某些部分构造消息了?我尝试将$data=json_decode($order)$data->date_created结合使用,但当我转储最后一部分时,这并没有给我任何帮助。

共有1个答案

邹嘉致
2023-03-14

它是json,除了开始的数组部分(假设您试图访问date_create):

您可以像以前一样使用json_decode(),但是date_create也是一个数组,因此您还需要选择要从中选择的项。

$data = json_decode($order, true);

echo $data['date_created']['date']; // 2017-12-15 15:58:42.000000

因此,如果您想要客户名称,例如:

echo $data['billing']['first_name'].' '.$data['billing']['last_name'];
Array
(
    [id] => 1154
    [parent_id] => 0
    [status] => pending
    [currency] => EUR
    [version] => 3.2.3
    [prices_include_tax] => 1
    [date_created] => Array
        (
            [date] => 2017-12-15 15:58:42.000000
            [timezone_type] => 1
            [timezone] => +00:00
        )

    [date_modified] => Array
        (
            [date] => 2017-12-15 15:58:42.000000
            [timezone_type] => 1
            [timezone] => +00:00
        )

    [discount_total] => 0
    [discount_tax] => 0
    [shipping_total] => 0
    [shipping_tax] => 0
    [cart_tax] => 0
    [total] => 6.50
    [total_tax] => 0
    [customer_id] => 0
    [order_key] => wc_order_5a33f1321ba43
    [billing] => Array
        (
            [first_name] => Peter
            [last_name] => Parker
            [company] => 
            [address_1] => Baker Str.
            [address_2] => 2
            [city] => London
            [state] => 
            [postcode] => 50668
            [country] => DE
            [email] => something@gmail.com
            [phone] => 01627423
        )

    [shipping] => Array
        (
            [first_name] => Peter
            [last_name] => Parker
            [company] => 
            [address_1] => Baker Str.
            [address_2] => 2
            [city] => London
            [state] => 
            [postcode] => 50668
            [country] => DE
        )

    [payment_method] => cod
    [payment_method_title] => Bei Abholung
    [transaction _id] => 
    [customer_ip_address] => ...
    [customer_user_agent] => mozilla/5.0 (macintosh; intel mac os x 10_13_2) applewebkit/537.36 (khtml, like gecko) chrome/blabla safari/537.36
    [created_via] => checkout
    [customer_note] => 
    [date_completed] => 
    [date_paid] => 
    [cart_hash] => be97db19eba58864b9166961ce22a706
    [number] => 1154
    [meta_data] => Array
        (
            [0] => Array
                (
                    [id] => 4731
                    [key] => _billing_title
                    [value] => 1
                )

            [1] => Array
                (
                    [id] => 4732
                    [key] => _shipping_title
                    [value] => 1
                )

        )

    [line_items] => Array
        (
            [18] => Array
                (
                )

        )

    [tax_lines] => Array
        (
        )

    [shipping_lines] => Array
        (
            [19] => Array
                (
                )

        )

    [fee_lines] => Array
        (
        )

    [coupon_lines] => Array
        (
        )

)
echo '<h2>Order Details</h2>'.PHP_EOL;
echo order_details(json_decode($json, true));

function order_details($items, $str = null) {   
    foreach ($items as $key => $item) {
        if (is_array($item)) {
            $str .= PHP_EOL.'<h3>'.ucwords(str_replace('_', ' ', $key)).'</h3>'.PHP_EOL;
            $str .= order_details($item, $str);
        } else {
            $str .= '<b>'.ucwords(str_replace('_', ' ', $key)).'</b>: '.$item.'</br>'.PHP_EOL;
        }
    }
    return $str;
}
<h2>Order Details</h2>
<b>Id</b>: 1154</br>
<b>Parent Id</b>: 0</br>
<b>Status</b>: pending</br>
<b>Currency</b>: EUR</br>
<b>Version</b>: 3.2.3</br>
<b>Prices Include Tax</b>: 1</br>

<h3>Date Created</h3>
<b>Date</b>: 2017-12-15 15:58:42.000000</br>
<b>Timezone Type</b>: 1</br>
<b>Timezone</b>: +00:00</br>

<h3>Date Modified</h3>
<b>Date</b>: 2017-12-15 15:58:42.000000</br>
<b>Timezone Type</b>: 1</br>
<b>Timezone</b>: +00:00</br>
<b>Discount Total</b>: 0</br>
<b>Discount Tax</b>: 0</br>
<b>Shipping Total</b>: 0</br>
<b>Shipping Tax</b>: 0</br>
<b>Cart Tax</b>: 0</br>
<b>Total</b>: 6.50</br>
<b>Total Tax</b>: 0</br>
<b>Customer Id</b>: 0</br>
<b>Order Key</b>: wc_order_5a33f1321ba43</br>

<h3>Billing</h3>
<b>First Name</b>: Peter</br>
<b>Last Name</b>: Parker</br>
<b>Company</b>: </br>
<b>Address 1</b>: Baker Str.</br>
<b>Address 2</b>: 2</br>
<b>City</b>: London</br>
<b>State</b>: </br>
<b>Postcode</b>: 50668</br>
<b>Country</b>: DE</br>
<b>Email</b>: something@gmail.com</br>
<b>Phone</b>: 01627423</br>

<h3>Shipping</h3>
<b>First Name</b>: Peter</br>
<b>Last Name</b>: Parker</br>
<b>Company</b>: </br>
<b>Address 1</b>: Baker Str.</br>
<b>Address 2</b>: 2</br>
<b>City</b>: London</br>
<b>State</b>: </br>
<b>Postcode</b>: 50668</br>
<b>Country</b>: DE</br>
<b>Payment Method</b>: cod</br>
<b>Payment Method Title</b>: Bei Abholung</br>
<b>Transaction  Id</b>: </br>
<b>Customer Ip Address</b>: ...</br>
<b>Customer User Agent</b>: mozilla/5.0 (macintosh; intel mac os x 10_13_2) applewebkit/537.36 (khtml, like gecko) chrome/blabla safari/537.36</br>
<b>Created Via</b>: checkout</br>
<b>Customer Note</b>: </br>
<b>Date Completed</b>: </br>
<b>Date Paid</b>: </br>
<b>Cart Hash</b>: be97db19eba58864b9166961ce22a706</br>
<b>Number</b>: 1154</br>

<h3>Meta Data</h3>

<h3>0</h3>
<b>Id</b>: 4731</br>
<b>Key</b>: _billing_title</br>
<b>Value</b>: 1</br>

<h3>1</h3>
<b>Id</b>: 4732</br>
<b>Key</b>: _shipping_title</br>
<b>Value</b>: 1</br>

<h3>Line Items</h3>

<h3>18</h3>

<h3>Tax Lines</h3>

<h3>Shipping Lines</h3>

<h3>19</h3>

<h3>Fee Lines</h3>

<h3>Coupon Lines</h3>
 类似资料:
  • 问题内容: 我有一个要从ExtJS界面发布到PHP的JSON对象。我从那里得到物体 该对象将包含3个数组,我可以查看是否 我需要获取每个数组并从中构建SQL查询。我的第一个障碍是将数组移出对象,尽管这可能是不必要的。这是我正在使用的代码块: 我没有正确创建数组。我也尝试过 那也不行。我确定我在这里容易错过一些事情。同样,这可能是不必要的,因为我可能可以直接访问它们。我需要通过遍历数组并将每个键附加

  • 本文向大家介绍MongoDB中如何访问JSON数组的内部元素,包括了MongoDB中如何访问JSON数组的内部元素的使用技巧和注意事项,需要的朋友参考一下 要在MongoDB中访问JSON数组的内部元素,请使用点表示法。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是访问JSON数组内部元素的查询- 这将产生以下输出-

  • 问题内容: 我有以下JSON对象: 这是来自一个请求,我有成功。 问题是,即使dataJS在控制台中正确显示,我也无法访问JSON对象中的项目。有想法吗? 问题答案: 那是因为您的基础对象也是数组。 我怀疑那会有用

  • 问题内容: 我是python的新手,我想了解如何处理数组的元素。例如,如果我有: 我已经在python中定义了它们,例如: 我看到我无法参考,但是给了我一个结果。所以,我不明白如何访问这些数组的第二行?那会是吗?为了将它们乘以等,我将如何做? 问题答案: 如果你有 然后 将正常工作。就像您想要的那样,它指向第二列,第二行。 我不确定您做错了什么。 要乘以第三列中的单元格,您可以执行以下操作 它将适

  • 我有一个问题: 我有一个列表Java,我填充了不同的值。例如,我有: 我也有其他价值观。现在,我想在这个列表中只搜索第一个字段。例如,我想要A的indexOf。我尝试过写这段代码: 但我得到-1作为回报。我想知道在加载数组时如何访问列表中的字段。

  • 问题内容: 我正在将数组传递给我的Django模板。我要访问的阵列中的阵列的各个元素(例如)等等,而不是通过整个阵列循环。 有没有办法在Django模板中做到这一点? 问题答案: 请记住,Django模板中的点符号用于Python中的四种不同符号。在模板中,可以表示以下任何一项: 它按此顺序尝试它们,直到找到匹配项。因此,你将获得列表索引,因为你的对象不是以3为键的dict,没有名为3的属性,也没