Json数据转换为ADO.NET DataSet其实方法有很多,Newtonsoft.Json也提供了DataSet的Converter用以转换Json数据。但是有些情况下DataSet Converter并不管用,而且也不一定能够满足项目需要。这里介绍另一种简单有效的方法,能够方便快速地将Json数据转为ADO.NET DataSet。
设计
事实上Newtonsoft.Json已经提供了一套完整的Json数据文档结构,Newtonsoft.Json.Linq命名空间下提供了这种文档结构的对象模型,因此我们可以借用这样的模型,在其上应用访问者(Visitor,GoF95)模式,对树状结构的对象模型进行遍历,以达到ADO.NET DataTable、DataRelation的创建以及DataSet的生成。基本对象模型如下:
其实实现起来还是非常简单的,我已经把完整的项目和单元测试开源到GitHub上。具体的代码可以参考https://github.com/daxnet/Json2DataSet开源项目。
性能
性能方面,在实现的过程中,我发现有两个地方是性能瓶颈:
1.正则表达式
2.JToken.Path属性
如果在你的代码中需要高频率地反复调用这两种操作,那么你就需要考虑性能问题。尤其是JToken.Path属性,它的内部实现牵涉到链表数据结构、复杂循环等,因此效率不是很高,应该尽量避免使用这一属性(当然我开源的代码中还有一处在调用该属性,可以进一步优化)。
另一方面,对于ADO.NET DataTable和DataRelation的构建,性能还是相当高的,无需担心。总体上看,将15MB的Json数据转换为DataSet仅需4秒左右,有兴趣的朋友还可以在该代码基础上进一步优化。
调用
在该开源项目主页上已经说明了调用方式。很简单:
var json = File.ReadAllText(@"d:\test.json"); var dataSet = Json2DataSetConverter.Convert(json);
应用
TIBCO Spotfire是一种世界先进的数据分析软件,不仅功能强大,还可以为其定制数据导入插件,方便地将外部数据导入其中进行分析。它是以表的形式对数据进行整合和分析的,因此,它对ADO.NET DataSet的支持是非常好的,能够很方便地将ADO.NET DataSet中所包含的表数据导入。
现有一个RESTful API,它能够获取全世界所有国家的列表信息,包括国家名称、语言、人口、与该国接壤的国家数量等等。该API的地址是:
GET http://restcountries.eu/rest/v1/all
好了,现在我开发了一个非常简单的插件,可以通过GET命令,从RESTful API导入数据到TIBCO Spotfire中:
导入数据后,我可以立刻分析出哪个国家人口比重最大,哪个国家与其接壤的国家数量最多:
看,我国不仅人口最多(占世界人口的19%),而且与我国接壤的国家数量最多(15个)。
问题内容: 我希望能够从Java操作方法中的JSON字符串访问属性。只需说一下即可使用该字符串。下面是该字符串的示例: 在此字符串中,每个JSON对象都包含其他JSON对象的数组。目的是提取ID列表,其中任何给定对象都具有包含其他JSON对象的group属性。我将Google的Gson视为潜在的JSON插件。谁能提供某种形式的指导,说明如何从此JSON字符串生成Java? 问题答案: 我将Goog
本文向大家介绍Python实现把数字转换成中文,包括了Python实现把数字转换成中文的使用技巧和注意事项,需要的朋友参考一下 周末在家,写了个小程序,用于将阿拉伯数字转换化大写中文。程序没经过任何优化,出没经过详细的测试,挂到网上,方便将来有需要的时候直接拿来用。
问题内容: 我正在尝试将表单数据转换为对象,但我有这个线程,但是我不知道为什么它对我不起作用。我正在使用以下代码。 我尝试调试它,并注意到当我的函数运行时,它总是在else语句中运行代码。 问题答案: 我在JSFiddle中添加了以上表单,它将JSON数据显示为输出。 工作中的JSFiddle
问题内容: 我无法将JSON字符串转换为asp.net中的.net对象。我正在使用隐藏字段将JSON字符串从客户端发送到服务器(通过将JSON object.Tostring()保留在隐藏字段中并读取文件后面代码中的隐藏字段值) Json字符串/对象: .Net对象 文件后面代码中的会话代码 转换时出现以下错误: 从名称空间“。”中期待元素“ root”。遇到“无”,名称为“,名称空间”。 问题答
问题内容: 目前,我正在使用带有webView前端的本机android应用程序。 我有类似的东西: 在活动中 我做了一个dataObject数组,比如dataObject x [5]; 现在,我想将这5个dataObject作为JSON的回调函数传递给我的javascript webView接口。 我浏览了互联网,似乎大多数教程都在谈论如何转换。没有太多关于。我找到了一个教会我的人,可以工作。 但
问题内容: 有谁知道如何将HTML值表转换为漂亮的JSON对象以使用jQuery进行操作? 问题答案: HTML表格?就像二维数组中的所有内容一样? 然后只需使用$ .json(或您想要的任何库)将其转换为JSON字符串即可。 编辑 —重新编写以使用数组原型中的本机(此处为shim): jQuery 函数具有将返回的数组展平为结果数组的“功能”。也就是说,如果回调函数返回的值本身就是一个数组,则不