资讯详情

Json 动态列写入数据库

【问题】

最近需要从另一个网站做一个网站。 api 获取 json 然后将数据存储到自己的数据库中。但是我是为了 json 操作一无所知,请问大神。废话不多说,代码如下 json 我已经清理了大部分结构相同的数据: (里面主要是 imei 的 Service我把它放在数据库列表中 2 张表里面 groups 跟 Services)

{  “SUCCESS”:[  {  “MESSAGE”:“IMEIServiceList”,  “LIST”:{  “MOVISTARSPAIN”:{  “GROUPNAME”:“MOVISTARSPAIN”,  “SERVICES”:{  “3”:{  “SERVICEID”:32,  “SERVICENAME”:“MOVISTARNOKIAINSTANTE”,  “CREDIT”:4,  “TIME”:“1-30Minutes”,  “INFO”:“<pstyle=\“text-align:center;\”><spanstyle=\“color:#ff0000;\”data-mce-mark=\“1\”>SERVICIOINSTANTEDE0-10MINSPARANOKIASMOVISTAR????Nodct3/4??‰  \r\n<pstyle=\“text-align:center;\”><spanstyle=\“color:#ff0000;\”data-mce-mark=\“1\”>CONGUIDADOSERIAC???mayoriason20digitos    \r\n<pstyle=\“text-align:center;\”>?????é?¨?????o?????ˉ20???:?<spanstyle=\“font-size:medium;\”> C?3???—(c2c5)???Nokia7230    \r\n<pstyle=\“text-align:center;\”><spanstyle=\“color:#ff0000;\”data-mce-mark=\“1\”> SERIAASHA100,101,311,500ytodoslosdeestasseries    \r\n<pstyle=\“text-align:center;\”><spanstyle=\“color:#ff0000;\”data-mce-mark=\“1\”> YWINDOWSPHONELumia    ”,    “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”:“MOVISTARNOKIA20NCK”,  “CREDIT”:12,  “TIME”:“1-30Minutes”,  “INFO”:“<pstyle=\“text-align:center;\”><spanstyle=\“font-size:small;color:#ff0000;\”>ALLNOKIAMOVISTARSPAIN20DIGITS,<labelstyle=\“color:#ff0000;font-size:small;\”>NOTSUPPORTEDLUMIA820  \r\n<pstyle=\“text-align:center;\”><labelstyle=\“color:#ff0000;font-size:small;\”>ParaConfirmasies20nckono,checkinfodemovilconprogramainfinity,descargadesdepaginaaportado    \r\n<pstyle=\“text-align:center;\”>    ”,    “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”  }  }  },  “VODAFONESPAIN”:{  “GROUPNAME”:“VODAFONESPAIN”,  “SERVICES”:{  “5”:{  “SERVICEID”:50,  “SERVICENAME”:“VODAFONENOKIABB5SL3”,  “CREDIT”:5,  “TIME”:“1-60Minutes”,  “INFO”:“<pstyle=\“text-align:center;\”><spanstyle=\“font-size:medium;color:#ff0000;\”>Nokialumia,nokia100,610ynokias20digitosnosoportados!  \r\n<pstyle=\“text-align:center;\”><spanstyle=\“color:#ff0000;font-size:small;\”> Nokiavodafoneinstanteenhorariodelatienda    \r\n<pstyle=\“text-align:center;\”><spanstyle=\“color:#ff0000;font-size:small;\”> 20??????????‰???o?’?LUMIA????”ˉ???    \r\n<pstyle=\“text-align:center;\”><spanstyle=\“color:#ff0000;font-size:small;\”>     ”,    “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”:“VODAFONESONY&SONYERIC(RAPIDO)”,  “CREDIT”:16,  “TIME”:“1-24Hours”,  “INFO”:“<pstyle=\“text-align:center;\”><spanstyle=\“color:#ff0000;font-size:medium;\”>VODAFONEPHONE,NONOKIAYWINDOWNPHONE,NOIPHONE?  \r\n<pstyle=\“text-align:center;\”><spanstyle=\“colo: #ff0000; font-size: medium;\”>SAMSUNG 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 解析功能,还可以将解析结果写入数据库,完成题目中的要求,脚本可以这样写:

A B C D E
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)
5 for A2.SUCCESS =A5.LIST.fno()
6 for 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 表

标签: kbh智能压力变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司