栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Json 动态列写入数据库

Json 动态列写入数据库

【问题】

最近做一个网站需要从另外一个网站的 api 获取 json 数据然后存放到自己的数据库。可是本人对于 json 操作一窍不通,所以请教各位大神。废话不多说了代码如下
json 文件内容我已经清理一大部分相同结构的数据:
(里面主要就是 imei 的 Service 列表我把它放到数据库 2 张表里面 groups 跟 Services )

{

“SUCCESS”: [

{

“MESSAGE”: “IMEI Service List”,

“LIST”: {

“MOVISTAR SPAIN”: {

“GROUPNAME”: “MOVISTAR SPAIN”,

“SERVICES”: {

“3”: {

“SERVICEID”: 32,

“SERVICENAME”: “MOVISTAR NOKIA INSTANTE”,

“CREDIT”: 4,

“TIME”: “1-30 Minutes”,

“INFO”: “SERVICIO INSTANTE DE 0-10 MINS PARA NOKIAS MOVISTAR(Nodct3/4)

rnCON GUIDADO SERIA C ï¼Œmayoriason20digitos



rnå�心部分机型是20ä½�:å  C系列(c2c5),Nokia7230



rn SERIA ASHA 100, 101, 311, 500 y todos los de estas series



rn  Y WINDOWS PHONE  Lumia



”,



“Requires.Network”: “None”,

“Requires.Mobile”: “None”,

“Requires.Provider”: “None”,

“Requires.PIN”: “None”,

“Requires.KBH”: “None”,

“Requires.MEP”: “None”,

“Requires.PRD”: “None”,

“Requires.Type”: “None”,

“Requires.Locks”: “None”,

“Requires.Reference”: “None”

},

“8”: {

“SERVICEID”: 77,

“SERVICENAME”: “MOVISTAR NOKIA 20 NCK”,

“CREDIT”: 12,

“TIME”: “1-30 Minutes”,

“INFO”: “ALL NOKIA MOVISTAR SPAIN 20 DIGITS ,NOT SUPPORTED LUMIA 820 

rnPara /confirm/ia si es 20 nck o no ,check info de movil con programa infinity ,descarga desde pagina aportado



rn 



”,



“Requires.Network”: “None”,

“Requires.Mobile”: “None”,

“Requires.Provider”: “None”,

“Requires.PIN”: “None”,

“Requires.KBH”: “None”,

“Requires.MEP”: “None”,

“Requires.PRD”: “None”,

“Requires.Type”: “None”,

“Requires.Locks”: “None”,

“Requires.Reference”: “None”

}

}

},

“VODAFONE SPAIN”: {

“GROUPNAME”: “VODAFONE SPAIN”,

“SERVICES”: {

“5”: {

“SERVICEID”: 50,

“SERVICENAME”: “VODAFONE NOKIA BB5 SL3”,

“CREDIT”: 5,

“TIME”: “1-60 Minutes”,

“INFO”: “Nokia lumia, nokia 100, 610 y nokias 20 digitos no soportados!

rn Nokia vodafone instante en horario de la tienda



rn 20��的手机和LUMIA�支�



rn  



”,



“Requires.Network”: “None”,

“Requires.Mobile”: “None”,

“Requires.Provider”: “None”,

“Requires.PIN”: “None”,

“Requires.KBH”: “None”,

“Requires.MEP”: “None”,

“Requires.PRD”: “None”,

“Requires.Type”: “None”,

“Requires.Locks”: “None”,

“Requires.Reference”: “None”

},

“10”: {

“SERVICEID”: 95,

“SERVICENAME”: “VODAFONE SONY&SONY ERIC(RAPIDO)”,

“CREDIT”: 16,

“TIME”: “1-24 Hours”,

“INFO”: “VODAFONE PHONE ,NO NOKIA Y WINDOWN PHONE,NO IPHONE 

rnSAMSUNG CODIGO NO LLEVA DEFREEZE



”,



“Requires.Network”: “None”,

“Requires.Mobile”: “None”,

“Requires.Provider”: “None”,

“Requires.PIN”: “None”,

“Requires.KBH”: “None”,

“Requires.MEP”: “None”,

“Requires.PRD”: “None”,

“Requires.Type”: “None”,

“Requires.Locks”: “None”,

“Requires.Reference”: “None”

}

}

}

}

}

],

“apiversion”: “2.0.0”

}

下面是 sql 数据库的的 2 张表的结构:
这里就把需要的字段全部列出来: group 的名称是唯一的。然后 2 张表根据 groupid 关联

Createtable[dbo].[Groups]

(

[ID] [int] IDENTITY(1,1) NOTNULL,                   –id

[Groupname] [nvarchar] (50) notnulldefault(''),    –名称

CONSTRAINT[PK_Groups_id] PRIMARYKEYCLUSTERED 

(

[id] ASC

)WITH(IGNORE_DUP_KEY = OFF) ON[PRIMARY]

) ON[PRIMARY]

CREATETABLE[dbo].[Services](

[id]    [int] IDENTITY(1,1) NOTNULL,                                        –id

[Serviceid] [int] notnulldefault(0),                                    –服务 id

[Servicename] [nvarchar] (50) notnulldefault(''),                        –服务名称

[groupid] [int] notnulldefault(0),                                        –组 id

[Credit] [decimal] notnulldefault(0.00),                                –所需点数

[Time] [nvarchar] (50) notnulldefault(''),                                –需要的时间

[INFO] [nvarchar] (3000) notnulldefault(''),                            –信息说明 

[Network] [nvarchar] (100) notnulldefault(‘none’),                        –网络需求

[Mobile] [nvarchar] (100) notnulldefault(‘none’),                        –移动需求

[Provider] [nvarchar] (100) notnulldefault(‘none’),                        –供应商需求

[PIN] [nvarchar] (100) notnulldefault(‘none’),                            –手机 PIN 码需求

[KBH] [nvarchar] (100) notnulldefault(‘none’),                            –KBH 需求

[MEP] [nvarchar] (100) notnulldefault(‘none’),                            –MEP 需求

[PRD] [nvarchar] (100) notnulldefault(‘none’),                            –PRD 需求

[Type] [nvarchar] (100) notnulldefault(‘none’),                            –类型需求

[Locks] [nvarchar] (100) notnulldefault(‘none’),                        –是否锁定

[Reference] [nvarchar] (100) notnulldefault(‘none’),                    –参考需求

[isstatus] [nvarchar] (1) notnulldefault(‘0’),                            –状态 0 可用 1 不可用

[remark] [nvarchar] (255) notnulldefault(''),                            –备注

[Pricingid] [int] notnulldefault(0),                                    –价格策略

CONSTRAINT[PK_Services_id] PRIMARYKEYCLUSTERED 

(

[id] ASC

)WITH(IGNORE_DUP_KEY = OFF) ON[PRIMARY]

) ON[PRIMARY]

 因为还有其他这样的 json 文件,我只需要有个这个方式的转化实例,最最好是能将我上面的成功转化存放到数据库的代码,我参照下操作其他 json 就方便了,之前也百度很多,不过还是有些不明白。而且上面的 json 跟别人百度上的格式有不一样。

【回答】

这里的 JSON 串由于包含多层且很多层都是动态的(如 LIST 和 SERVICES 下的节点数量和名称都不固定),这为解析带来了很大难度;而且其中属性名部分还包含空格(如 MOVISTAR SPAIN)和点号(如 Requires.Network)这也大大增加了解析难度,使用 JAVA 或 C# 太难写了。。。

SPL 提供了 JSON 解析功能,还可以将解析结果写入数据库,完成题目中的要求,脚本可以这样写:

ABCDE
1=file(“d:\s.json”).read()
2=json(A1)
3=create(Groupname,groupid)
4=create(Serviceid,Servicename,groupid,Credit,Time,INFO,Network,Mobile,Provider,PIN,KBH,MEP,PRD,Type,Locks,Reference)
5for A2.SUCCESS=A5.LIST.fno()
6for B5=A5.LIST.field(B6)
7=C6.SERVICES.fno()
8     for C7=C6.SERVICES.fname(C8)
9=C6.SERVICES.field(C8)
10=A3.record([C6.GROUPNAME,D8])
11                =A4.record([D9.#1,D9.#2,D8,D9.#3,D9.#4,D9.#5,D9.#6,D9.#7,D9.#8,D9.#9,D9.#10,D9.#11,D9.#12,D9.#13,D9.#14,D9.#15])
12=connect(“demo”) 
13=A12.update(A3,groups,Groupname,groupid;groupid)
14=A12.update(A4,services,Serviceid,Servicename,groupid,Credit,Time,INFO,Network,Mobile,Provider,PIN,KBH,MEP,PRD,Type,Locks,Reference;Serviceid)

A3 运行结果:

A4 运行结果:

A1: 读取 json 串

A2: 生成序表

A3:创建含有列名的序表

A4:创建含有列名的序表

A5~A11:循环读取 json 数据,填入 A3 和 A4 序表中

A12:连接数据库

A13:更新数据到 groups 表;

A14:更新数据到 services 表

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303642.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号