Json格式应用
Json格式在用于数据存储方面比xml有着空间上的优势,Json格式又主要分为两种格式:名称/值 对 和数组。
在我的业务环境中需要先把一种空间比较小的格式。
测试如下:
取数据库中的一张表然后生成两种格式的Json文件进行对比。

生成名称/值 对的格式,样式如下:

大小为:6460KB
生成数组的格式,样式如下:

大小为:2736KB。
数组由于列的信息只显示一次,大小约为原来的50%。
生成两种格式的C#代码如下:
static void Main(string[] args)
{
DataTable dt = DataAccess.GetData("select * from stk_code"); string sJson= JsonConvert.SerializeObject(dt);
FileStream fs = new FileStream("D:\\Json.txt", FileMode.Append);
StreamWriter sw = new StreamWriter(fs, Encoding.Default);
sw.WriteLine(sJson);
sw.Close();
fs.Close(); Dictionary<string, List<object>> dataList = DataToList.DataTableToList(dt);
sJson = JsonConvert.SerializeObject(dataList);
fs = new FileStream("D:\\Json2.txt", FileMode.Append);
sw = new StreamWriter(fs, Encoding.Default);
sw.WriteLine(sJson);
sw.Close();
fs.Close(); Console.ReadKey();
}
将Datatable转为Dictionary 的方法如下:
public class DataToList
{
/// <summary>
/// 将datarow 转化为Dictionary<string, List<object>>
/// 结果集中第一行为列名,第二行开始为数据,数据行用数字0-N表示
/// </summary>
/// <param name="table"></param>
/// <returns></returns>
public static Dictionary<string, List<object>> DataTableToList(DataTable table)
{
Dictionary<string, List<object>> DataList = new Dictionary<string, List<object>>(); List<object> itemValue = new List<object>();
string itemKey = "col"; foreach (DataColumn dc in table.Columns)
{
itemValue.Add(dc.ColumnName);
}
DataList.Add(itemKey, itemValue); int i = ;
foreach (DataRow dr in table.Rows)
{
itemKey = i.ToString();
itemValue = new List<object>(); foreach (var val in dr.ItemArray)
{
itemValue.Add(val);
}
DataList.Add(itemKey, itemValue);
i++;
} return DataList;
} }
//写流文件
ObjectStream.Serialize<Dictionary<string, List<object>>>(dataList, @"D:\stream.bin");
//读流文件
Dictionary<string, List<object>> ndt = (Dictionary<string, List<object>>)ObjectStream.Deserialize(@"D:\stream.bin");
数组的格式虽然占用的空间会小一些,但需要进行一次转换,所以在选择的时候需要视具体情况而定。
主要有两方面的因素:
1.列名和内容的比例大小关系,如果大部分字段是文本类的,大小的区别应该不大。采用数组反而多一次转换。
2.是带宽为稀缺资源还是CPU为稀缺资源?
第三种方案,将数据对象直接存储为流:
如这个对象是DataTable则大小为:10368KB。如采用简单一点的对象如
Dictionary<string,List<object>>则大小为:3225
所以大小取决于对象的简单程度。
对象和流之间的转换代码:
public class ObjectStream
{
/// <summary>
/// 将一个对象转换为流文件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <param name="filename"></param>
/// <returns></returns>
public static bool Serialize<T>(T value, string filename)
{
try
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bs = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.FileStream stream = new System.IO.FileStream(filename, System.IO.FileMode.Create);
bs.Serialize(stream, value);
stream.Close();
return true;
}
catch
{
return false;
}
} /// <summary>
/// 从流文件中获取一个对象
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static Object Deserialize(string fileName)
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bs = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.FileStream stream = new System.IO.FileStream(fileName, System.IO.FileMode.Open);
return bs.Deserialize(stream);
}
}
Json格式应用的更多相关文章
- 一个粗心的Bug,JSON格式不规范导致AJAX错误
一.事件回放 今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...
- WebApi返回Json格式字符串
WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉都不怎么好. 先贴一下, 网上给的常用方法吧. 方法一:(改配置法) 找到Global.asax文件,在 ...
- 【.net 深呼吸】聊聊WCF服务返回XML或JSON格式数据
有时候,为了让数据可以“跨国经营”,尤其是HTTP Web有关的东东,会将数据内容以 XML 或 JSON 的格式返回,这样一来,不管客户端平台是四大文明古国,还是处于蒙昧时代的原始部落,都可以使用这 ...
- asp.net dataTable转换成Json格式
/// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...
- plist文件、NSUserDefault 对文件进行存储的类、json格式解析
========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...
- ajax提交数据到java后台,并且返回json格式数据前台接收处理值
1.前台html页面.有一段代码如下: 账 户: <input type="text" name="userName" id="userN& ...
- Struts2返回json格式数据踩坑记录
事件起因 昨天提测修改冻结/解冻银行卡样式的功能,微姐测试过程中发现调用ajax请求耗时过长,今天来排查,发现浏览器请求/finance/ajax/freeze/ajaxGetShopLists时,对 ...
- JSON格式序列化与反序列化(List、XML)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- json相关,浏览器打开json格式的api接口时,进行格式化,chrome插件
在chrome浏览器中安装Google jsonview插件能够自动格式化json格式的数据.
- WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)
DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...
随机推荐
- jquery自定义插件——以 选项卡插件为例
一直打算尝试自定义插件,终于付诸实践了,现在把内容发表出来,与大家共勉. 我是根据自己正在用的插件,模仿其源码,实现的自定义插件,完成之后,在网上看相关资料,对自定义插件部分,有了更明确的认识. jq ...
- Android实战技巧:ViewStub的应用
在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局.那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在 ...
- SqlServer性能优化索引(五)
导入表结构: select * into ProductCategory from AdventureWorksDW2014.dbo.DimProductCategory select * into ...
- 纠结attr(),prop()
刚刚看博客无意中看到attr()和prop()的区别,回头就去翻了一下手册,感觉手册上写的过于简单,不能很清晰的分辨出两者的区别,两者的参数用法都是高度相似. attr():设置或返回被选元素的属性值 ...
- Android中下载、安装和卸载(原)
应用场景:在检查版本更新的时候经常需要从服务器端下载然后安装到手机中 使用工具: XUtils,这个开源的框架真的是需要花大把时间去阅读和理解的,十分有用的,on the way ! fighting ...
- maven打包不执行测试用例
在执行maven打包时不需要执行测试用例,使用如下2种方式实现:-DskipTests=true : 不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下 ...
- extjs_button
在网页中,填写的内容都在form(表单)中显示,要交互就要用到按钮.所以,今天试了一下按钮,但不清楚的是js中定义的按钮能显示在页面,但怎样响应php代码呢?实际效果就是点击按钮后,通过什么方式调出数 ...
- 从输入 URL 到浏览器接收的过程中发生了什么事情
从输入 URL 到浏览器接收的过程中发生了什么事情? 原文:http://www.codeceo.com/article/url-cpu-broswer.html 从触屏到 CPU 首先是「输入 U ...
- 网站统计中的数据收集原理及实现(share)
转载自:http://blog.codinglabs.org/articles/how-web-analytics-data-collection-system-work.html 网站数据统计分析工 ...
- FTP应答码&响应码
2016-06-16 00:57:25 110: 重新启动标记应答. 120: 在n分钟内准备好 125: 连接打开准备传送 150: 打开数据连接200: 命令成功202: 命令失败211: 系统状 ...