Json字符串查询_json字符串查看-程序员宅基地

技术标签: SQL Server  c#高级编程  

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace Json查询
{
    class Program
    {
        static void Main(string[] args)
        {
            var input = @"
              { ""store"": {
                    ""book"": [ 
                      { ""category"": ""reference"",
                            ""author"": ""Nigel Rees"",
                            ""title"": ""Sayings of the Century"",
                            ""price"": 8.95
                      },
                      { ""category"": ""fiction"",
                            ""author"": ""Evelyn Waugh"",
                            ""title"": ""Sword of Honour"",
                            ""price"": 12.99
                      },
                      { ""category"": ""fiction"",
                            ""author"": ""Herman Melville"",
                            ""title"": ""Moby Dick"",
                            ""isbn"": ""0-553-21311-3"",
                            ""price"": 8.99
                      },
                      { ""category"": ""fiction"",
                            ""author"": ""J. R. R. Tolkien"",
                            ""title"": ""The Lord of the Rings"",
                            ""isbn"": ""0-395-19395-8""
                      }
                    ],
                    ""bicycle"": {
                      ""color"": ""red"",
                      ""price"": 19.95
                    }
              }
            }
        ";
            var json = JObject.Parse(input);
            //输出book[*]中category == 'reference'的book
            var acme = json.SelectTokens("$.store.book[?(@.category == 'reference')]");
            //输出book[*]中price>10的book
            var acme2 = json.SelectTokens("$.store.book[?(@.price>10)]");
            //输出book[*]中含有isbn元素的book
            var acme3 = json.SelectTokens("$.store.book[?(@.isbn)]");
            //输出该json中所有price的值
            var acme4 = json.SelectTokens("$..price");
            //可以提前编辑一个路径,并多次使用它
            var stringpath =("$.store.book[*]");

            Console.WriteLine(JsonConvert.SerializeObject(acme));
            //var context = new JsonPathContext { ValueSystem = new JsonPathContext.BasicValueSystem() };
            //var values = context.SelectNodes(json, "$.store.book[*].author").Select(node => node.Value);
            //Console.WriteLine(JsonConvert.SerializeObject(values));
            Console.ReadKey();
        }
    }
}

多时候我们为了支持模型结构不变,而把一些变化的东西放入到一个JSON类型的字段当中。这样变化的字段就可以放入到同一个字段当中。而且Json的格式又可以很好的支持不同表关联关系。

虽然好处多多,但是查询匹配过滤就显得有些麻烦!

JSON字符串如何解析,如何写查询条件进行过滤呢?

这里有几种好理解的方案:

1.JsonSQL

JsonSQL实现了使用SQL select语句在json数据结构中查询的功能。

例子:

1
jsonsql.query( "select * from json.channel.items order by title desc" ,json);

主页:http://www.trentrichardson.com/jsonsql/

2.JSONPath

JSONPath就像是针对JSON数据结构的XPath。

例子:

1
jsonPath( books,  '$..book[(@.length-1)]' )

主页:http://goessner.net/articles/JsonPath/

3.linq.js

linq.js——Javascript中的LINQ(译者注:.Net中的概念,见http://msdn.microsoft.com/zh-tw/library/bb397897

1
2
3
4
5
var  queryResult2 = Enumerable.From(jsonArray)
     .Where( "$.user.id < 200" )
     .OrderBy( "$.user.screen_name" )
     .Select( "$.user.screen_name + ':' + $.text" )
     .ToArray();

主页:http://linqjs.codeplex.com/

4.Json.NET

其实就是 “using Newtonsoft.Json;”。在.net中用来进行json序列化和反序列化的操作,原来其也有进行字符串查询的操作。

上面一开始举得例子中使用的就是这一方法。



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Shiyaru1314/article/details/50739908

智能推荐

Instructions for MMIX-程序员宅基地

Loading and storing80 LDB $X,$Y,$Z (load byte): s($X) ⟵ s(M1[A]).84 LDW $X,$Y,$Z (load wyde): s($X) ⟵ s(M2[A]).88 LDT $X,$Y,$Z (load tetra): s($X) ⟵ s(M4[A]).8C LDO $X,$Y,$Z (load octa): s($..._branch if positive

我的世界服务器修改名称颜色,我的世界怎么给别人改名字颜色 | 手游网游页游攻略大全..._王锦添的博客-程序员宅基地

发布时间:2015-11-15COD5服务器里改名字颜色 改名字颜色方法1:1. 搜索config_mp.cfg 文件2. 用记事本打开该文件 搜索seta clanName ""3. 在&qu ...标签:使命召唤5:世界战争发布时间:2016-06-20使命召唤5专题: 改名字颜色方法1:1. 搜索config_mp.cfg 文件2. 用记事本打开该文件 搜索seta clanName..._更改op名字颜色

PLC的软件故障与硬件故障_硬件组件已移除或缺失-程序员宅基地

  plc故障分为软件故障和硬件故障,电工学习网小编结合PLC系统现场故障处理实例,分享PLC故障维修经验,本文是PLC高手速成秘籍!!  PLC主要由中央处理单元、输入接口、输出接口、通信接口等部分组成,其中CPU是PLC的核心,I/0部件是连接现场设备与CPU之间的接口电路,通信接口用于与编程器和上位机连接。对于整体式PLC,所有部件都装在同一机壳内;对于模块式PLC,各功能部件独立封装,称为模块或模板,各模块通过总线连接,安装在机架或导轨上。(初学者可以结合plc视频教程来学习)  ._硬件组件已移除或缺失

TS基本语法_ts describe-程序员宅基地

TS流是基于Packet的位流格式,每个包是188个字节(或204个字节,在188个字节后加上了16字节的CRC校验数据,其他格式一样)。TS文件分为以下几层: 解释 TS流(Transport Stream) 传输流,将具有共同时间基准或独立时间基准的一个或多个PES组合(复合)而成的单一数据流(用于数据传输) PS流 节目流,将具有共同时间基准的一个或多..._ts describe

解决Github连接超时ideaclone failed: unable to access: failed to connect to github.com port 443: timed_idea提示update failed unable to access failed to con_PareCycest的博客-程序员宅基地

解决Github连接超时ideaclone failed: unable to access: failed to connect to github.com port 443: timedWIN+R弹出运行窗口后输入cmd在cmd中输入ping github.com,试试看能不能连通。或者在桌面上右键点击git bash here 输入ssh -T [email protected] 或者 ssh -V [email protected]..._idea提示update failed unable to access failed to connect to github.com port

云计算实战系列-磁盘阵列_云计算为什么要用磁盘阵列-程序员宅基地

企业级磁盘阵列一、 什么是磁盘阵列磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。 独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同 的地方(因此,冗余地)的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因 为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数_云计算为什么要用磁盘阵列

随便推点

fragment添加style_fragment style-程序员宅基地

pad开发,有可能在fragment中添加viewpager,这样可以给viewpager添加样式_fragment style

Ubuntu下安装配置Honeyd蜜罐-程序员宅基地

Ubuntu下安装配置Honeyd蜜罐蜜罐概述蜜罐(Honeypot)是一种安全资源,其价值在于被探测、被攻击或者被攻陷。因此带有欺骗、诱捕性质的网络、主机、服务均可看成一个蜜罐。除了欺骗攻击者,蜜罐一般不支持其他正常的业务,因此任何访问蜜罐的行为都是可疑的,这是蜜罐工作的基本原理。虚拟蜜罐概述Honeyd是一款针对Unix系统设计的、开源、低交互程度的蜜罐,用于对可疑活动检测、捕获和预警。Honeyd能在往里冲次上模拟大量虚拟蜜罐,可用于模拟多个IP地址的情况。当攻击者企图访问时,Honeyd就会

Oracle 能够tnsping,但程序无法访问-程序员宅基地

最近,在一台服务器做了个应用部署,发现数据库实例能够通过Oracle 自带命令tnsping访问,如下所示C:\Documents and Settings\Administrator&gt;tnsping testTNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 02-11月-2018 1...

office2007 word 从任意页插入页码_word 批量添加页码 cdsn-程序员宅基地

最近设计一份毕业论文,想从正文开始插入页面,但是设置页码的时候封面和目录都显示了页码,本人花了一翻功夫才把目录与正文分开(一般封面与目录无需设置页码)。步骤如下:1、将光标移到正文第一个字符处,然后点击命令“页面布局->分隔符->分节符->下一页”,此处就把目录与正文分开,这是光标应在正文的第一行。2 、点正文第一页任意位置,然后点击命令“插入→页眉页脚→页码→设置页面格式”,设置你需要起始页从什么数字开始;再执行“插入->页眉页脚->页码-页面底端->普通数字3(此处根_word 批量添加页码 cdsn

使用android访问SQLServer数据库。_android sql server-程序员宅基地

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl_android sql server

CCS计算机科学导论 02电子计算机Electronic Computing_bureaucracy 计算机-程序员宅基地

1947 年,贝尔实验室科学家 \N John Bardeen,Walter Brattain,William Shockley。幸运的是,不久之后在 1906 年,美国发明家 "李·德富雷斯特"1947年9月,哈佛马克2型的操作员从故障继电器中,拔出一只死虫。他在"弗莱明"设计的两个电极之间,加入了第三个 "控制" 电极。在 1904 年,英国物理学家 "约翰·安布罗斯·弗莱明"图灵也在"布莱切利园"做了台机电装置,叫 "Bombe"它有一个50英尺的传动轴,由一个 5 马力的电机驱动。_bureaucracy 计算机

推荐文章

热门文章

相关标签