php - 将 json 响应中的嵌套数组插入 mysql

标签 php mysql json

我从客户端收到了以下 JSON 响应:

{
    "name": "Joel",
    "cities_visited": [{
        "city1": "Chicago",
        "city2": "Seattle"
    }],
    "active": true
}

我正在使用 json_decode 获取结果,但在将 cities_visited 作为一组数据插入 mysql 时遇到问题。我也尝试过 json_decode($json, true) 但没有成功。

任何人都可以告诉我如何正确准备这些数据的格式以便我可以将其插入我的数据库吗?

我需要以某种方式将这个 cities_visited 数组放入 mysql 的一个条目行中,然后能够将它取出并像使用 json_encode 一样返回它

最佳答案

如果您只有一列用于cities_visited,并且您需要将多个值放入其中,那么它们需要以某种方式序列化。由于您已经在处理 JSON,因此不妨将其转回 json 以将其发送到数据库。

$user = json_decode($input);
$user->cities_visited = json_encode($user->cities_visited);

类似的东西。但这不是最好的解决方案,您真正想做的是在用户和城市之间建立多对一的关系

用户

  • id(整数)
  • 姓名(字符串)
  • 状态(字符串)

城市

  • id(整数)
  • 姓名(字符串)

访问次数

  • 用户 ID(整数)
  • 城市编号(整型)

因此,在上面的示例数据中,您将在用户表中为 Joel 创建一行,在芝加哥和西雅图的城市表中创建两行,并在将它们链接在一起的访问表中创建两行。

这种方法的优点是现在分析数据要容易得多。假设您想知道访问最多的城市是什么?简单

select count(*) AS number_visits, name as city_name
from Visits v 
join Cities c on v.city_id = c.id
group by v.city_id
order by visits
limit 1

如果 cities_visited 字段在数据库中被序列化,您必须使用 PHP 遍历每个用户并自己计算结果。

关于php - 将 json 响应中的嵌套数组插入 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16114037/

相关文章:

mysql - 事件记录内连接

java - Jersey 2.17 : How to avoid MessageBodyWriter error in Jersey Server?

jquery - 无法在jquery中解析json

javascript - 在 JavaScript 中更改默认图像扩展名

php - 如何将 JSON 编码的数组保存到 MySQL

php - 将 mysql_fetch_array 结果拆分为前端的两个不同的两个不同行

mysql - 从mysql解析数据到elasticsearch时会报错

json - Swift - JSON 数组值

javascript - 需要将变量从 javascript 传递到 php 而无需刷新或提交

php - Python空字典和PHP