我正在尝试创建一个 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/