【问题标题】:Parsing JSON to MySQL with PHP使用 PHP 将 JSON 解析为 MySQL
【发布时间】:2013-10-20 05:05:16
【问题描述】:

我想在 MySQL 上记录一些 JSON 文件,我阅读了 SO 中的一些帮助主题,但我遇到了问题。 123

我的 JSON 看起来像这样;

     {
          "hoursPlayed": 21775,
          "communityVisibilityState": 3,
          "timeCreated": 1261107470,
          "props": [
       {
          "level": 53,
          "quality": 6,
          "origin": 0,
       },
       {
          "level": 10,
          "quality": 6,
          "origin": 0,
       }
    ]
  }

我已经创建了表及其字段,但是当涉及到 JSON 的最后一个条目中的“props”数组时,我不知道该怎么做。它本身就是一个数组,它应该有自己的 MySQL 表。如果没有我可以阅读的“道具”部分,请使用 json_decode() 并遍历数组以存储所有其他值,但“道具”部分让我感到困惑。

我的表应该有字段,对吧?

  • hoursPlayed * INT
  • communityVisibilityState * INT
  • timeCreated * INT
  • 道具 * ??

如何将其存储在 MySQL 的表中?

通常;

mysqli_query($con,"INSERT INTO my_jsonDB (hoursPlayed, communityVisibilityState, timeCreated)
VALUES (21775, 3,1261107470)");

我的情况呢?

【问题讨论】:

  • I can't figure out what to do when it comes to the "props". -- 好吧,你想用props做什么?
  • "props" 数组在 JSON 中,在 "timeCreated" 之后
  • well, what do you want to do with props?
  • 只是一个数值数组。使用 0 或 1 访问 props 中的第一个或第二个数组。 $json['props'][0]['level']也就是说,请解释一下你想用道具做什么。
  • 我试图在编辑版本中解释它。你问的方式,我开始觉得我不解的原因是我的MySQL知识太低了。

标签: php mysql json


【解决方案1】:

是时候看看foreign key constraints in MySQL了。基本上,您的表结构将如下所示:

  • 表#1 用户 - UserID | hoursPlayed | communityVisibilityState | timeCreated
  • 表#2 用户属性 - userKey | level | quality | origin。

由于您使用的是 MySQL,因此您可以查看 autoincrement 的主键 UserID。您将使用此主键作为外键插入UserProperty 表中。

整个过程如下所示:

  • 在第一个表中插入一行。获取插入的主键(即第一列)。
  • 遍历所有“props”字段:
    • 接下来,使用您在上述步骤中获得的密钥,并在将当前“prop”插入第二个表时使用它。

【讨论】:

  • 我明白了,非常感谢。在我离开之前,您认为将所有内容移至 MySQL 以读取和删除条目,还是坚持使用旧的 json_decode 和 unlink() 来删除和删除该 JSON 是否更好。
  • 另外,这更像是文件系统与数据库的问题。 :-) 这将取决于您的用例。如果文件数量非常少,例如
【解决方案2】:

你的 props 应该在他们自己的表中,并且有一个外键引用回到 my_jsonDB。

例如,您应该有一个名为 Props 的表。

列将是 id、my_jsonDB_id、level、quality、origin。

第一行可能是: 1,1, 53,6,0

然后当你插入到 Props 表中时,你只需将 my_jsonDB_id 设置为 my_jsonDB 表中 prop 数据相关的 id。

看看这个例子:http://www.w3schools.com/sql/sql_foreignkey.asp

【讨论】:

  • 感谢您的解释和链接。
【解决方案3】:

例如,您也可以使用Text 字段。并在将其保存到数据库之前使用serialize() 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2021-09-18
    • 2019-09-15
    • 2023-04-10
    相关资源
    最近更新 更多