php - 在 PHP 中创建嵌套的 JSON 对象

标签 php json

我正在尝试创建一个 JSON 对象以提交给 API。

这是我要实现的目标的示例:


{
    packages: [
        {
            orderNumber: 10000004,
            fulfillmentPackageId: "ShipCo #123456",
            warehouseId: 4,
            carrier: "USPS",
            tracking: "12345667890002394230",
            service_level: "First Class",
            products: [
                {sku: "testSku1", quantity: 5}
            ]
        },
        {
            orderNumber: 10000004,
            fulfillmentPackageId: "ShipCo #123457",
            warehouseId: 4,
            carrier: "USPS",
            tracking: "12345667890002394231",
            service_level: "Priority",
            products: [
                {sku: "testSku2", quantity: 1},
                {sku: "testSku3", quantity: 4}
            ]
        }
    ]
}

我可以毫无问题地创建它的主要部分,但我对“产品”部分感到困惑。它似乎是第一个中的另一个 json 对象。我该如何添加它?

我目前用它来创建对象的主体,它从 MYSQL 表中读取数据,这是在遍历表结果的循环中。


        $package = new stdClass();

        $package->orderNumbner = $row['zentail_order_no'];
        $package->fulfillmentPackageId = $row['fulfillment_id'];
        $package->warehouseId = 2;
        $package->carrier = $row['carrier'];
        $package->tracking = $row['tracking'];
        $package->service_level = $row['service_level'];
        $package->products = getPackages($row['zentail_order_no']);

如您所见,我正尝试通过另一个函数 getPackages() 填充对象的产品部分。


function getPackages($zentail_order_no){
   
    include 'sql/config.php';
    include 'sql/opendb.php';
   
    $sql = "SELECT * FROM zentail WHERE zentail_order_no = '{$zentail_order_no}'";
    $result = $db->query($sql);
   
    if ($result->num_rows > 0) {
      while($row = $result->fetch_assoc()) {

            $products->sku = $row['sku'];
            $products->quantity = $row['qty'];
   
      }
    }

    return $products;
}

数据库中有多行具有相同的订单号但 SKU 和 QTY 的值不同,我希望它在行上循环时将它们添加到对象中,就像使用 arraypush() 一样,然后添加它进入原始对象的产品领域。

我确定它相对简单,我发现很难找到我想要实现的目标的正确术语,因此搜索答案非常棘手。

谢谢

最佳答案

在您的函数中将 $products 设为数组。

但首先开始使用绑定(bind)的、准备好的参数化查询进行编码,以防止 SQL Injection Attack .

function getPackages($zentail_order_no){
   
    include 'sql/config.php';
    include 'sql/opendb.php';
   
    
    // select only what you need, makes the query quicker, 
    // and allows you fetch the object without more fiddling
    $sql = "SELECT sku, qty FROM zentail 
            WHERE zentail_order_no = ?";
    $stmt = $db->prepare($sql);
    $stmt->bind_param('i', $zentail_order_no);

    $db->execute($sql);
    $result = $stmt->get_result();
   
    $products = [];
    
    // now as you want an object, you can fetch the row as an object
    // rather than an array and then fiddle it into an object
    while($row = $result->fetch_object()) {
        $products[] = $row;
    }
    return $products;
}

关于php - 在 PHP 中创建嵌套的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63708463/

相关文章:

php - 将多维数组从 PHP 传递到 jQuery

用于从关键字字符串创建关键字列表的 php 算法

PHP——自动 SQL 注入(inject)保护?

javascript - 如何构建一个要转换为 JSON 的 JavaScript 数组?

php - php-搜索查询

PHP DateTime::createFromFormat 和多语言

python - 在 json.dumps() 中将 bool 值转换为字符串

php - 使用多个嵌套 JSON 键进行 DynamoDB 扫描 (PHP)

java - 如何修复导入大型 JSON 文件时内存不足的问题

c# - Json 返回列表中的列表