读书人

(100分)json存放到数据库有关问题。

发布时间: 2013-10-16 11:29:46 作者: rapoo

(100分)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": "<p style=\"text-align: center;\"><span style=\"color: #ff0000;\" data-mce-mark=\"1\">SERVICIO INSTANTE DE 0-10 MINS PARA NOKIAS MOVISTAR???No dct3/4???</span></p>\r\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\" data-mce-mark=\"1\">CON GUIDADO SERIA C ???mayoria son20 digitos</span></p>\r\n<p style=\"text-align: center;\">?????é?¨?????o ?????ˉ20???:?<span style=\"font-size: medium;\"> <strong>C?3????(c2 c5)???<strong>Nokia 7230</strong></strong></span></p>\r\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\" data-mce-mark=\"1\"><strong>SERIA ASHA 100, 101, 311, 500 y todos los de estas series</strong></span></p>\r\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\" data-mce-mark=\"1\"><strong> Y WINDOWS PHONE  Lumia</strong></span></p>",
"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": "<p style=\"text-align: center;\"><span style=\"font-size: small; color: #ff0000;\"><strong>ALL NOKIA MOVISTAR SPAIN 20 DIGITS ,</strong></span><strong style=\"color: #ff0000; font-size: small;\">NOT SUPPORTED LUMIA 820 </strong></p>\r\n<p style=\"text-align: center;\"><strong style=\"color: #ff0000; font-size: small;\">Para Confirma si es 20 nck o no ,check info de movil con programa infinity ,descarga desde pagina aportado</strong></p>\r\n<p style=\"text-align: center;\"> </p>",
"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": "<p style=\"text-align: center;\"><strong><span style=\"font-size: medium; color: #ff0000;\">Nokia lumia, nokia 100, 610 y nokias 20 digitos no soportados!</span></strong></p>\r\n<p style=\"text-align: center;\"><span style=\"color: #ff0000; font-size: small;\"><strong>Nokia vodafone instante en horario de la tienda</strong></span></p>\r\n<p style=\"text-align: center;\"><span style=\"color: #ff0000; font-size: small;\"><strong>20???? ?????????o???LUMIA?????ˉ???</strong></span></p>\r\n<p style=\"text-align: center;\"><span style=\"color: #ff0000; font-size: small;\"><strong> </strong></span></p>",


"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": "<p style=\"text-align: center;\"><span style=\"color: #ff0000; font-size: medium;\">VODAFONE PHONE ,NO NOKIA Y WINDOWN PHONE,NO IPHONE? </span></p>\r\n<p style=\"text-align: center;\"><span style=\"color: #ff0000; font-size: medium;\">SAMSUNG CODIGO NO LLEVA DEFREEZE</span></p>",
"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关联

[解决办法]
JOSN数据是什么 不了解,我想说的是,如果是文本,就存文本到数据库中,如果是 文件 就用blod存
[解决办法]
Json 是JavaScript的对象。
格式(名称 / 值对):{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }
直接放一个字段里边吧。
[解决办法]
先把json转成对象,然后写入数据库。
http://bbs.csdn.net/topics/390214298
[解决办法]
定义和你的json字符串对于的类。然后把json字符串反序列化成对象,最后按照对象建表,再把对象属性存入相应的字段中。
偷懒的话,可以把json字符串直接反序列化为Dictionary。

总之,这是一个体力活。
json的格式非常好懂。
[解决办法]
下载一个 Newtonsoft.Json.dll
找以下说明,将json转换成对象.
跟踪监视一下通过json转换成的对象你就大悟了.
Dictionary 也是键值对 key:object,value:object ,josn也是键值对
注意Dictionary也是object
[解决办法]
"SERVICES":?{
"3":?{

这里面的 "3":没有一点规律可循,你至少给点约束吧,例如是否肯定是个位数字且不重复,如果完全是装饰品,那就用正则先移除,否则无法转换到特定对象上处理。
------解决方案--------------------


参考下:http://social.msdn.microsoft.com/Forums/sqlserver/en-US/d6481d7b-6981-4c3c-9701-988fdc887c48/load-json-type-data-to-sql-server?forum=transactsql
[解决办法]
JSON字符串存数据库,使用的时候取出json字符串 反序列化为相应的List<class>对象,linq操作
[解决办法]
我觉得你有必要二次处理下,因为你的Json原文如果直接转换到对象,那个对象类型构造会很复杂,不利于导入到数据库。
比如那个"LIST"属性,按照你的表设计,应该是后面为数组形式,表示一个个的group,但是它却以普通属性的形式存在,因此无法映射到数组中;再看"SERVICES"属性也是,里面都是一个个属性表示,而非数组形式,Json里面的数组是由中括号[]来表示的,而不是大括号{}。
有一种类型Dictionary<string,string>可以用来初次处理,你的Json可以匹配到该类型,之后在对内部的每个value进行Json转换到对象。
[解决办法]
把json字符串解析成对象 在存放到数据库
[解决办法]
按照你的思路先分组,转换城实体后,在进行操作比较容易
[解决办法]
JSON->转换成对象-》再转换成SQL-》存入数据库。
吃饱了撑得啊,直接字符串或数据流保存到数据库VARCHAR就行。取出来直接给JS前台就能用,干嘛做这么多封了又拆的,JSON本来就是对象。
[解决办法]
把json转换成datatable不就好了?网上找一个方法
[解决办法]
楼主你还没解决啊
[解决办法]
在无模式的json或者xml面前,关系数据库的思维模式早已经崩溃了。你应该把NoSQL看做一个技术方向,而不要硬塞在关系数据库里边。
[解决办法]
使用fastCSharp也可以这样定义class

        class x1
{
public x2[] SUCCESS;
}
class x2
{
public string MESSAGE;
public x3[] SPAINS;
private object LIST
{
set
{
SPAINS = value != null ? ((fastCSharp.setup.cSharp.ajax.jsonNode)value).Dictionary.Values.getArray(node => fastCSharp.setup.cSharp.ajax.parseJson.Get<x3>(node)) : null;
}
}
}
class x3
{
public string GROUPNAME;
public x4[] SERVICES_;
private object SERVICES
{
set
{
SERVICES_ = value != null ? ((fastCSharp.setup.cSharp.ajax.jsonNode)value).Dictionary.Values.getArray(node => GetSERVICES(node)) : null;
}
}
private static x4 GetSERVICES(fastCSharp.setup.cSharp.ajax.jsonNode node)
{
System.Collections.Generic.Dictionary<string, fastCSharp.setup.cSharp.ajax.jsonNode> dictionary = node.Dictionary;
string Requires = "Requires.";
foreach (string key in dictionary.Keys.getArray())
{
if (key.StartsWith(Requires)) dictionary[key.Substring(Requires.Length)] = dictionary[key];
}
return fastCSharp.setup.cSharp.ajax.parseJson.Get<x4>(node);
}
}


class x4
{
public int SERVICEID;
public string SERVICENAME;
int groupid;
public decimal CREDIT;
public string TIME;
public string INFO;
public string Network;
public string Mobile;
public string Provider;
public string PIN;
public string KBH;
public string MEP;
public string PRD;
public string Type;
public string Locks;
public string Reference;
}

读书人网 >C#

热点推荐