sql - 在sql中从json创建表
问题描述
在使用 sql 时,我在表中遇到了以下 json。我想将其转换为一个单独的表,其中一列用于消息,一列用于指挥官。有什么功能可以做到吗?如果有什么不同,我正在使用 postgresql。我基本上是在尝试形成一个表格,将指挥官值与其他表格中指挥官的姓名进行比较。因此,如果有一种简单的方法可以在不形成表格的情况下从儿子中提取指挥官的姓名,那也很好。
{
"log": [
{
"message": "Cute dino!",
"commander": "Sam"
},
{
"message": "Cute dino!",
"commander": "Joe"
},
{
"message": "Cute dino!",
"commander": "Bob"
}
],
"features": {
"food": "1",
"fuel": "0",
"minerals": "1",
"dinosaurs": "1"
}
}
解决方案
您可以使用jsonb_array_elements()
将数组转换为行,然后将其用作 CREATE TABLE 语句的源:
create table data
as
with input (value) as (
values ('{
"log": [
{
"message": "Cute dino!",
"commander": "Sam"
},
{
"message": "Cute dino!",
"commander": "Joe"
},
{
"message": "Cute dino!",
"commander": "Bob"
}
],
"features": {
"food": "1",
"fuel": "0",
"minerals": "1",
"dinosaurs": "1"
}
}'::jsonb)
)
select t.log ->> 'message' as message,
t.log ->> 'commander' as commander
from input
cross join jsonb_array_elements(value -> 'log') as t(log)
推荐阅读
- c# - 如何在 atom-editor 中更改 C# 版本?
- php - 下载一个在 PHP 中受密码保护的 Excel 工作表?
- javascript - 是否可以使用更短的辅助函数而不是 typeof something !== "undefined"?
- bert-language-model - BERT 训练检查点
- php - Codeigniter Form-Validation:验证输入是否等于某个字符串
- android - Android - ViewPager2 在调用 Diffutil.dispatchUpdatesTo 时将适配器位置重置为 0
- java - Spring-Batch 跳过异常如何适用于复合编写器
- hadoop - 如何在Hadoop中制作10G的随机文本?
- reactjs - 如何更改反应中的按钮名称?
- python - Django:如何将产品添加到订单模型,因为我尝试显示 ManyRelatedManager' 对象没有属性 'add' 或 filter 或类似错误