【问题标题】:How to parse JSON of a specific type with PHP Slim framework?如何使用 PHP Slim 框架解析特定类型的 JSON?
【发布时间】:2016-11-13 17:34:42
【问题描述】:

我有 JSON 字符串由 Android 应用程序发布到我基于 PHP 的苗条框架。

这是 JSON:

 ItemList=[{"Address":"addresses 263838","CreatedDate":"2016-11-11 11:53:53","DeviceID":"1","ID":0,"Latitude":24.8715396,"Locality":"locality","Longitude":67.0898003,"Name":"Item ","OfflineId":20161111115352400,"Subchannel":"Subchannel","Sublocality":"Sublocality","ToUpdate":false,"imageLocalPath":"/storage/emulated/0/Pictures/1478847221674.jpg"},{"Address":"address","CreatedDate":"2016-11-11 17:46:41","DeviceID":"1","ID":0,"Latitude":24.87110129,"Locality":"Locality","Longitude":67.09033959,"Name":"Item 23","OfflineId":20161111174637550,"Subchannel":"Subchannel","Sublocality":"Sublocality","ToUpdate":false,"imageLocalPath":"/storage/emulated/0/Pictures/1478868360328.jpg"},{"Address":"Address 648483","CreatedDate":"2016-11-12 09:43:54","DeviceID":"1","ID":0,"Latitude":24.87952002,"Locality":"Locality","Longitude":67.09332882,"Name":"Item 25","OfflineId":20161112094353314,"Subchannel":"Subchannel","Sublocality":"Sublocality","ToUpdate":false,"imageLocalPath":"/storage/emulated/0/Pictures/1478925794392.jpg","imageName":"1478925794392.jpg"}]

Slim 框架 (PHP) 代码

$app->post('/itemlist', function ($request, $response) {


$input          =   $request->getParsedBody();


foreach($input as $item)
{
    $sql = "INSERT INTO jsondump (jsondata) VALUES (:jsondump)";

    $resQur = $this->db->prepare($sql);
    $resQur->bindParam("jsondump", $item);    

    $resQur->execute();       
}

return $this->response->withJson($input);

});

问题/挑战: JSON 对象列表应分解为 JSON 对象。目前我正在将 JSON 直接转储到数据库中以查看结果。它总是转储整个 JSON 字符串(包含整个列表)。

【问题讨论】:

  • 使用json_decode 然后循环遍历它。
  • 那么如何循环。我发现使用 foreach 有困难。没有得到预期的结果。
  • 您应该使用 foreach 循环遍历它,然后使用特定的键来获取该键的数据。请提供您已完成的代码以及您遇到问题的位置。

标签: json rest slim


【解决方案1】:

如果发布数据时content-type 设置为application/json,则$input 将自动解码。

考虑这个可调用的测试路线:

$app->post("/", function ($request, $response, $args) {
    $input = $request->getParsedBody();
    if ($input === null) {
        echo "FAILED to decode JSON\n";
        echo json_last_error_msg();
        exit;
    }

    var_dump($input);
});

测试:

$ curl -i -H“内容类型:应用程序/json”\ http://localhost:8888 \ -d '[{"地址":"地址 263838","CreatedDate":"2016-11-11 11:53:53","DeviceID":"1","ID":0,"Latitude":24.8715396 ,"Locality":"locality","Longitude":67.0898003,"Name":"Item","OfflineId":20161111115352400,"Subchannel":"Subchannel","Sublocality":"Sublocality","ToUpdate":false ,"imageLocalPath":"/storage/emulated/0/Pictures/1478847221674.jpg"},{"Address":"address","CreatedDate":"2016-11-11 17:46:41","DeviceID" :"1","ID":0,"Latitude":24.87110129,"Locality":"Locality","Longitude":67.09033959,"Name":"Item 23","OfflineId":201611111174637550,"Subchannel": "子频道","子区域":"子区域","ToUpdate":false,"imageLocalPath":"/storage/emulated/0/Pictures/1478868360328.jpg"},{"地址":"地址 648483","CreatedDate ":"2016-11-12 09:43:54","DeviceID":"1","ID":0,"Latitude":24.87952002,"Locality":"Locality","Longitude":67.09332882," Name":"Item 25","OfflineId":20161112094353314,"Subchannel":"Subchannel","Sublocality":"Sublocality","ToUpdate":false,"imageLocalPath":"/storage/emulated/0/Pictures/ 1478 925794392.jpg","imageName":"1478925794392.jpg"}]'

给予:

HTTP/1.1 200 正常 主机:本地主机:8888 连接:关闭 X-Powered-By: PHP/7.0.12 内容类型:文本/html;字符集=UTF-8 数组(3){ [0] => 数组(13){ '地址' => 字符串(16)“地址 263838” '创建日期' => 字符串(19)“2016-11-11 11:53:53” '设备ID' => 字符串(1)“1” '身份证' => 整数(0) '纬度' => 双(24.8715396) '地点' => 字符串(8)“地点” '经度' => 双(67.0898003) '名字' => 字符串(5)“项目” '离线 ID' => 诠释(20161111115352400) '子频道' => string(10) "子频道" '子区域' => string(11) "子地区" '要更新' => 布尔(假) 'imageLocalPath' => string(46) "/storage/emulated/0/Pictures/1478847221674.jpg" } [1] => 数组(13){ '地址' => 字符串(7)“地址” '创建日期' => 字符串(19)“2016-11-11 17:46:41” '设备ID' => 字符串(1)“1” '身份证' => 整数(0) '纬度' => 双(24.87110129) '地点' => string(8) "地点" '经度' => 双(67.09033959) '名字' => string(7) "项目 23" '离线 ID' => 诠释(20161111174637550) '子频道' => string(10) "子频道" '子区域' => string(11) "子地区" '要更新' => 布尔(假) 'imageLocalPath' => string(46) "/storage/emulated/0/Pictures/1478868360328.jpg" } [2] => 数组(14){ '地址' => string(14) "地址 648483" '创建日期' => 字符串(19)“2016-11-12 09:43:54” '设备ID' => 字符串(1)“1” '身份证' => 整数(0) '纬度' => 双(24.87952002) '地点' => string(8) "地点" '经度' => 双(67.09332882) '名字' => string(7) "项目 25" '离线 ID' => 诠释(20161112094353314) '子频道' => string(10) "子频道" '子区域' => string(11) "子地区" '要更新' => 布尔(假) 'imageLocalPath' => string(46) "/storage/emulated/0/Pictures/1478925794392.jpg" '图像名称' => 字符串(17)“1478925794392.jpg” } }

即一个包含三个数组的数组。

【讨论】:

  • 感谢@Rob Allen 的帮助。是的,我让它工作了。以后我会牢记您的建议。感谢您的精彩解释。
猜你喜欢
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多