我有一个json数组,需要对其进行解析,以便在一个mysql查询中更新多行。
这是我的json数组:
[{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1000"}
,{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1001"}
,{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1003"}]
我正在尝试这样的更新查询:-
$query="UPDATE urd_voucher_table SET voucher_status ='$status', doc_no = '$docNo' WHERE voucher_id ='$vc_id'";
我想知道如何解析上面的json,以便获得voucher_status、doc_no和voucher_id的单独值。
感谢您的帮助。非常感谢。
使用json_decode()
解码JSON并在解码的数组上循环。
<?php
$json = '[{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1000"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1001"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1003"}]';
$arr = json_decode($json, TRUE); // Observe the second parameter. If it is TRUE, associative array will be returned irrespective of what json is.
if (! empty($arr)) {
foreach ($arr as $elem) {
extract($elem);
$query="UPDATE urd_voucher_table SET voucher_status ='$voucher_status', doc_no = '$doc_no' WHERE voucher_id ='$voucher_id'";
// Add your code here.
}
}
extract()的引用
使用json_decode()
,它将返回一个具有键、值对的关联数组,如:
$strJson = '[{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1000"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1001"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1003"}]';
$arr = json_decode($strJson);
将返回:
数组([0]=>stdClass对象([doc_no]=>ADV103[voucher_status]=>closed[voucher.id]=>URDV1000)[1]=>stdClass Object([doc_no]=>ADV103[voucher_status]=>closed[voucher_id]=>URDV1001)[2]=>stdClass Object([doc_no]=>ADV103[vouche_status]=>closed[vougher_id]=>URDV1003)
现在使用循环可以获取数据&插入/更新数据库。
您需要将json字符串解码为一个数组,遍历结果并运行更新查询。请看下面的例子。。。
$rows = json_decode('[{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1000"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1001"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1003"}]');
foreach ($rows as $row) {
$query="UPDATE urd_voucher_table SET voucher_status ='{$row['voucher_status']}', doc_no = '{$row['doc_no']}' WHERE voucher_id ='{$row['voucher_id']}'";
// ... Run query etc..
}
首先使用json_encode()
,然后在foreach
中迭代结果数组。如下所示:
$jsonString = '[{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1000"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1001"},{"doc_no":"ADV103","voucher_status":"closed","voucher_id":"URDV1003"}]';
$json_decoded = json_decode($jsonString);
foreach($json_decoded as $index=>$val){
$status = $val->voucher_status;
$docNo = $val->doc_no;
$vc_id = $val->voucher_id;
$query="UPDATE urd_voucher_table SET voucher_status ='$status', doc_no = '$docNo' WHERE voucher_id ='$vc_id'";
//execute query here
}
有关http://www.geeksengine.com/database/data-manipulation/bulk-insert.php
按照以下步骤
- 解码json
- 对每条记录应用foreach循环
-
为JSON中的每条记录构建并连接该部分的数据例如
(a,e,r),(br,t,y),(t,y,c);
-
在查询"
Insert into table (c1,c2,c3) VALUES
"中对该部分进行硬编码 - 以及在
step 3
中创建的attche数据
最终查询将是
Insert into table (c1,c2,c3) VALUES . STEP 3