关于解析含有动态key的json格式数据问题

la_lala 发布于 2016/09/24 15:24
阅读 435
收藏 0

最近一直在思考怎么讲json格式存储进sqlserver的问题。json数据是从第三方数据来的。格式不是很规范,这些数据的key是动态的。我现在想到的是先拿出层级最深子key最多的那条json数据建表。

结构基本上是固定的,就是有些key有可能有也有可能没有。不知道该怎么自动来获取每个字段正确的值

加载中
1
乌龟壳
乌龟壳

直接把整个json存到text字段里呢?如果你想随时查里面的某项,或许可以转成xml存到xml类型的字段里。

另一方面,你如果对这json的逻辑不是很清楚,我觉得第一步不是想数据库怎么怎么,而是先把里面的逻辑搞清楚。

乌龟壳
乌龟壳
回复 @la_lala : 你如果连结构都没弄清楚,存数据库里做什么?直接存文件,要分析的时候写代码读出来解析也不慢呢。
la_lala
la_lala
我的思路是这样的:如果一个key只对应这一个value,我就把这些key:value存到同一张表,key当做字段名,value当做字段值,如果是对应着一个list,我就把这个list的每个元素的key:value当做一条记录插入另一张表,这些表用第一层的key关联。现在的问题是有些key不是固定的,不好写程序。
0
ksfzhaohui
ksfzhaohui
关系型数据库不合适可以试试非关系型数据库
la_lala
la_lala
我也想过试着存到非关系型数据库,但是这些数据是要给分析人员用的。我还是想着先把json数据解析出来放到关系型数据库
0
la_lala
la_lala

引用来自“乌龟壳”的评论

直接把整个json存到text字段里呢?如果你想随时查里面的某项,或许可以转成xml存到xml类型的字段里。

另一方面,你如果对这json的逻辑不是很清楚,我觉得第一步不是想数据库怎么怎么,而是先把里面的逻辑搞清楚。

回复 @乌龟壳 : 结构我是清楚的,我的意思是当我迭代一个list来插入数据的时候,我是把list的每个元素当做一条记录插入sqlserver。例如:[{"name1":1,"name2":2},{"name1":2,"name2":4},{"name1":3,"name2":5}],这条我会插入三条记录,表结构是name1,name2。会有多个这样的list,但是有的list可能不存在name1字段,有的list不存在name2字段。我是这个意思,不好意思。不知道我表述清楚了没有。。
0
乌龟壳
乌龟壳

引用来自“乌龟壳”的评论

直接把整个json存到text字段里呢?如果你想随时查里面的某项,或许可以转成xml存到xml类型的字段里。

另一方面,你如果对这json的逻辑不是很清楚,我觉得第一步不是想数据库怎么怎么,而是先把里面的逻辑搞清楚。

引用来自“la_lala”的评论

回复 @乌龟壳 : 结构我是清楚的,我的意思是当我迭代一个list来插入数据的时候,我是把list的每个元素当做一条记录插入sqlserver。例如:[{"name1":1,"name2":2},{"name1":2,"name2":4},{"name1":3,"name2":5}],这条我会插入三条记录,表结构是name1,name2。会有多个这样的list,但是有的list可能不存在name1字段,有的list不存在name2字段。我是这个意思,不好意思。不知道我表述清楚了没有。。

那就做个kv的表如何?

create table kv ( int id, k varchar(100), v varchar(100));

select id, v from kv where k = 'name1';

la_lala
la_lala
@乌龟壳 回复@乌龟壳 : 恩恩,谢谢!!
乌龟壳
乌龟壳
回复 @la_lala : 只能说这是你要解决的问题。你可以把一定有的或者频率高的做成表,其他用这种方式也行,等等,你得自己去决定。还有就是一般别考虑太多,就算方案不对重做也不是事
la_lala
la_lala
这样的话数据量得翻上好几倍了
返回顶部
顶部