【问题标题】:Can't access decoded json data from database using assigned key无法使用分配的密钥从数据库访问解码的 json 数据
【发布时间】:2017-01-19 23:32:10
【问题描述】:

我的数据库中存储了一个 json 数据,如下所示:

'field_data" => '{"primary":"apple"}'

然后我把它解码成一个数组:

$decoded = json_decode($query['field_data'],1);
echo $decoded['primary'];

我得到的结果是:

Undefined index: primary

如果我尝试调试它,我可以看到该值。 我试图在不从数据库查询的情况下解码数据以隔离我的问题

$data = '{"primary":"apple"}';
$decoded = json_decode($data,1);
echo $decoded['primary'];

而且效果很好。如何使用键访问查询数据中的值?

【问题讨论】:

  • MySQL 从 5.7.8 开始支持原生 JSON 数据类型。如果您可以更改字段的数据类型,它将使您的生活更轻松。
  • 所以如果你var_dump($query['field_data']) 你确定它包含你所期望的......?
  • 您是否有错误报告。打开? error_reporting(E_ALL)
  • 是的,如果我使用 var_dump()、print_r() 或 dd(),我可以获得值
  • 哎呀,我看到你提到了错误消息。

标签: php mysql json laravel


【解决方案1】:

在这里'field_data" => '{"primary":"apple"}' 包装field_data 你已经放了一个' 和一个"。我认为他们都需要是'"

喜欢 'field_data' => '{"primary":"apple"}'

好的,如果我在您的数据库中得到正确的信息,您已经保存了一个看起来像 arraystring,而您正试图通过 $query['field_data'] 访问它,这是您无法做到的。

字符串看起来像 arraystring 不同。

如果您正在使用当前的实现,请使用这种方法。

$str = '"field_data" => "{"primary":"apple"}"';
list($fieldName, $json) = explode('=>', $str);
var_dump($str,$fieldName, $json);

即使那样你也需要清理$json,因为它仍然是string

但我建议使用serialize 保存您的数据,然后通过unserialize 访问。这样您就可以完全控制自己的数据了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多