在PHP中创建嵌套JSON对象
我正在尝试创建一个JSON对象以提交给API 以下是我试图实现的一个示例:在PHP中创建嵌套JSON对象,php,json,Php,Json,我正在尝试创建一个JSON对象以提交给API 以下是我试图实现的一个示例: { packages: [ { orderNumber: 10000004, fulfillmentPackageId: "ShipCo #123456", warehouseId: 4, carrier: "USPS", trackin
{
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对象中的另一个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()填充对象的产品部分
DB中有多行具有相同的订单号,但SKU和QTY的值不同,我希望当它在行上循环时,它会像使用arraypush()一样将这些行添加到对象中,然后将其添加到原始对象的products字段中
我确信这是一件相对简单的事情,我发现很难找到正确的术语来表达我想要表达的意思,所以寻找答案相当困难
谢谢在您的函数中创建
$products
数组
但首先要开始使用绑定的、准备好的参数化查询来编写代码,以防止出现错误
您可以使用数组轻松创建JSON。根据您的示例,以下是解决方案:
您需要对getPackages函数进行最小的更改:
include 'sql/config.php';
include 'sql/opendb.php';
function getPackages($zentail_order_no){
global $db;
$products = [];
$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()) {
array_push($products, [
'sku'=>$row['sku'],
'qty'=>$row['qty']
]);
}
}
return $products;
}
这里有一个活生生的例子:如果你把它全部放进一个嵌套数组,然后在该数组上使用json_encode()
,你应该会没事的。哈哈,谢谢@incredblehat或者应该是$thanker
没有争论,这是一个真正的感谢@incredblehat,特别是因为它没有像正常情况那样附带DV,一切都很好,我看到了这个傻瓜,我想,我会帮他修好的!我讨厌在答案上给DVs,这肯定是个糟糕的答案。你的好!说到这里,我只是强调一下关于SQL注入的重要注意事项。对于OP,一定要注意每个人在这方面给你的警告。它会救你的!
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;
}
include 'sql/config.php';
include 'sql/opendb.php';
function getPackages($zentail_order_no){
global $db;
$products = [];
$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()) {
array_push($products, [
'sku'=>$row['sku'],
'qty'=>$row['qty']
]);
}
}
return $products;
}