json 订阅
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 展开全文
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
信息
外文名
JavaScript Object Notation
缩    写
JSON
发    音
/ˈdʒeɪsən/
中文名
JavaScript 对象简谱
学    科
计算机工程
JSON简要历史
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON是Douglas Crockford在2001年开始推广使用的数据格式,在2005年-2006年正式成为主流的数据格式,雅虎和谷歌就在那时候开始广泛地使用JSON格式。
收起全文
精华内容
下载资源
问答
  • Java Json解析,Java Web Json解析,Java Web服务端获取Json数据,客户端通过HTTP获取Json数据
  • json jar包

    千次下载 热门讨论 2013-09-02 17:05:28
    在实际工作中,接口很多时候返回json格式,但有时返回的格式会有编码问题 假设如下接口:http://service.test.com/interface/getData_test.jsp 返回如下是正常的。 [{"name":"\u8fd9\u662f\u4e2a\u6d4b\u8bd5"}]...
  • commons-beanutils-1.8.0.jar、commons-collections-3.2.1.jar、commons-lang-2.5.jar、commons-logging-1.1.1.jar、ezmorph-1.0.6.jar、json-lib-2.4-jdk15.jar
  • JavaScript中使用JSON解析包解析JSON --- json.js 和 json2.js 以及 json3.js的使用区别 JSON官方(http://www.json.org/)提供了一个json.js,json.js是JSON官方提供的在JavaScript中解析JSON的js包,json.js、...

    JavaScript中使用JSON解析包解析JSON --- json.js 和 json2.js 以及 json3.js的使用区别

    JSON官方(http://www.json.org/)提供了一个json.js,json.js是JSON官方提供的在JavaScript中解析JSON的js包,json.js、json2.js、json3.js是从旧到新的三个版本,现在一般使用json3.js。

     

    JSON官方(http://www.json.org/)提供了一个json3.js,提供了JSON的序列化和反序列化方法,可以将一个JSON对象转换成JSON字符串,也可以将一个JSON字符串转换成一个JSON对象。这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法; 

    JSON 3是与各种JavaScript平台兼容的现代JSON实现,包括Internet Explorer 6,Opera 7,Safari 2和Netscape 6.当前版本是3.3.2。

    可以在 https://bestiejs.github.io/json3/ 获取到这个js. 现在一般用json3.js

    json3.js本地下载地址:http://download.csdn.net/download/chenchunlin526/10170731

    使用方法:

    使用该js包,需要在页面引入json3.js文件。

    JSON.parse(jsonstr); //可以将JSON字符串反序列化成JSON对象 

    JSON.stringify(jsonobj); //可以将JSON对象序列化成JSON对符串 

     

    ① JSON.parse(jsonstr); //可以将JSON字符串反序列化成JSON对象 

    举例:

    程序清单3:

    $(document).ready(function(){
    
        var data = '[{"name":"chunlynn","age": 27,"qq":"277539687"},
    {"name":"linda" ,"age": 25,"qq":"123456789"}]';  //同上放在一行
    
        var jsondata = JSON.parse(data);
        console.info(jsondata);
        console.info("姓名:"+jsondata[0].name);
        console.info("年龄:"+jsondata[0].age);
        console.info("qq:"+jsondata[0].qq);
    
        console.info("qq:"+jsondata[0]["qq"]);
        console.info(jsondata instanceof Array); //true
        console.info("jsondata[0]的JS类型: "+ typeof jsondata[0]);
        console.info("age的JS类型: "+ typeof jsondata[0].age); //number
        console.info("qq的JS类型: "+ typeof jsondata[0].qq); //string
    
    });

    结果:

     

     

    ② JSON.stringify(jsonobj); //可以将JSON对象序列化成JSON对符串 

    程序清单4:

    $(document).ready(function(){
        // JS对象,数组对象
        var data = [{"name":"chunlynn","age":27,"qq":"277539687"},
    {"name":"linda" ,"age":25,"qq":"123456789"}];   //同上行放在一行
    
        console.info("data的JS类型: "+ typeof data);
    
        var jsondata = JSON.stringify(data); //将JSON对象序列化为JSON字符串
        console.info(jsondata);
        console.info("jsondata的JS类型: "+ typeof jsondata);
    
    });

     

    结果:

     

    更多的使用方法如下:

    <%@ page language="java" contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%>
    
    <html>
    
    <head>
    <script src="https://cdn.bootcss.com/json3/3.3.2/json3.js"></script>
    <script src="https://cdn.bootcss.com/jquery/1.11.2/jquery.js"></script>
    </head>
    
    <body>
    <script type="text/javascript">
    $(document).ready(function(){
    
        //双引号转义
        //var data = "[{\"name\":\"chunlynn\",\"age\": 27,\"qq\":\"277539687\"},{"name":"linda","age":25,"qq":"556677"}]"; 
    
        //单引号放在最外面,就不用转义了
        var data = '[{"name":"chunlynn","age":27,"qq":"277539687"},{"name":"linda" ,"age":25,"qq":"556677"}]';  
    
        var jsondata = JSON.parse(data);
        console.info(jsondata);
        console.info("姓名:"+jsondata[0].name);
        console.info("年龄:"+jsondata[0].age);
        console.info("qq:"+jsondata[0].qq);
        console.info(jsondata instanceof Array);
    
        console.info("jsondata[0]的JS类型: "+ typeof jsondata[0]);
        console.info("age的JS类型: "+ typeof jsondata[0].age);
        console.info("qq的JS类型: "+ typeof jsondata[0].qq);
        var jsondata2 = JSON.parse(data, function (key, value) {
            if (typeof value == "number") {
              value = value+1000;
            }  
    
            return value;
    
        });
    
        console.info("姓名2:"+jsondata2[0].name);
        console.info("年龄2:"+jsondata2[0].age);
        console.info("qq2:"+jsondata2[0].qq);
    
    });
    
    </script>
    </body>
    </html> 


    结果:

     

    资源下载:

    【1】json3.js 【JS / JavaScript 中解析JSON的js包,JSON官方的JSON解析包】-CSDN下载
    http://download.csdn.net/download/chenchunlin526/10170731

    更多的关于JavaScript中解析JSON的方法请参考如下博文:

    【1】JavaScript中解析JSON --- JSON.parse()、JSON.stringify()以及$.parseJSON()使用详解 
    http://blog.csdn.net/chenchunlin526/article/details/78850924

     

     

    展开全文
  • json-handle谷歌浏览器json数据解析工具

    千次下载 热门讨论 2014-10-24 08:26:23
    json-handle谷歌浏览器json数据解析工具,装了此插件,在访问json数据时,自动解析成清晰的json格式.不用再为json而看得头晕眼花.此插件的使用:打开谷歌浏览器,到设置里面的拓展程序,然后勾选最上面的开发者模式,最后...
  • excel2json

    千次下载 热门讨论 2015-08-10 14:53:43
    将Excel表格转换成Json文件,这是EXE,源代码请见:https://github.com/neil3d/excel2json
  • JSON开发详解

    千人学习 2018-09-30 15:06:11
    JSON 是轻量级的文本数据交换格式,JSON 文本格式在语法上与创建 JavaScript 对象的代码相同,JSON 比 XML 更小、更快,更易解析。主要内容包括:JSON简介、JSON 语法、JSON使用、JSONP等。
  • json-lib-2.4和相应的依赖包

    千次下载 热门讨论 2016-05-10 00:28:37
    json的jar包都在这了。json的核心包:json-lib-2.4-jdk15.jar;json-2.4所依赖的jar包:commons-beanutils-1.8.0.jar,commons-collections-3.2.1.jar,commons-lang-2.5.jar,commons-logging-1.1.1.jar,ezmorph-...
  • json所有的jar包下载

    千次下载 热门讨论 2014-07-30 23:58:56
    json-lib-2.2.3-jdk15.jar commons-beanutils-1.7.0.jar commons-httpclient-3.1.jar commons-lang-2.3.jar commons-logging-1.1.1.jar commons-collections-3.2.1.jar ezmorph-1.0.3.jar 如果不关联这些包,则会...
  • 全国省份、城市JSON

    千次下载 热门讨论 2016-05-04 10:39:11
    全国省份、城市的JSON数据
  • 开发过程中经常会遇到json数据的处理,而单独对json数据进行增删改并不方便,尤其是Geojson文件的处理,通过对网络资料的整理总结,下面介绍Java语言方法对json数据进行读取、添加、删除与修改操作。
  • json-view-chrome插件 JSONView 0.0.32.2官方绿色版

    千次下载 热门讨论 2015-06-05 14:51:42
    JSONView 0.0.32.2 从谷歌商店下载。 chrome://extensions/ 开发者模式 载入 或者Canary及Dev版本,拖入crx文件
  • net.sf.json jar包 最全版

    万次下载 热门讨论 2013-11-27 18:04:43
    JAVA中使用JSON进行数据传递,用于java生成json字符串,和java解析json字符串(如果要使程序可以运行的话必须引入JSON-lib包,而JSON-lib包是一个beans,collections,maps,java arrays和XML和JSON互相转换的包)
  • json-jar包

    千次下载 2015-08-19 11:52:05
    jackson-xc-1.8.3.jar jackson-mapper-asl-1.9.2.jar jackson-core-asl-1.9.2.jar jackson-jaxrs-1.8.3.jar json-lib-2.4-jdk15.jar
  • 分享一个好用的JSON编辑器JSONedit

    千次下载 热门讨论 2014-02-25 09:45:23
    分享一个好用的JSON编辑器JSONedit,有需要的可以直接下载使用哦,工具很不错瞒好用的。
  • Xml和Json互转工具类

    热门讨论 2015-04-17 15:31:29
    本实例主要是通过json-libjar包中的工具类进行操作,简单实现了xml字符串和json字符串之间的转化,xml文件和json文件的转化。而且还兼容jsonObject和jsonArray两种格式,自己摸索,记录一下以便学习。
  • jsonEditor离线版

    热门讨论 2014-07-23 18:26:33
    jsonEditor离线版.可整理JSON格式生成对象树。
  • Notepad++Xml格式化插件和json格式化插件.zip

    千次下载 热门讨论 2017-08-29 20:19:09
    Notepad++自身没有json和xml格式化工具,为止我们增加对应的格式化工具,打包在一起提供给朋友们下载,具体使用可以查看 http://blog.csdn.net/xs_challenge/article/details/77686481
  • 谷歌浏览器JSON插件

    千次下载 热门讨论 2015-05-20 16:36:22
    谷歌浏览器json的插件,官方版的,放心使用
  • Jquery.json.js

    千次下载 热门讨论 2014-06-25 18:43:27
    在官网上一直下载不下来 然后共享在这 jquery.json-2.3.min.js和jquery.json-2.3.js
  • JSON.stringify 兼容IE6、7、8所需js

    千次下载 热门讨论 2015-08-24 17:01:58
    JSON.stringify在使用时,IE6、7、8会存在兼容问题,需导入json2.js
  • Editplus设置json格式化

    千次下载 热门讨论 2014-07-10 17:21:40
    Editplus 设置格式化json js 以及css设置方法和资源
  • JSON与XML的区别比较

    万次阅读 多人点赞 2019-06-20 09:19:52
     XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。 (4).解码难度方面。  XML的...

    1.定义介绍

    (1).XML定义

            扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。

            XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

    (2).JSON定义

            JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全独立于语言文本格式,同时也具备类似于C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)体系的行为。这些特性使JSON成为理想的数据交换语言。

            JSON基于JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。

     

    2.XML和JSON优缺点

    (1).XML的优缺点

    <1>.XML的优点

      A.格式统一,符合标准;

      B.容易与其他系统进行远程交互,数据共享比较方便。

    <2>.XML的缺点

      A.XML文件庞大,文件格式复杂,传输占带宽;

      B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;

      C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;

      D.服务器端和客户端解析XML花费较多的资源和时间。

    (2).JSON的优缺点

    <1>.JSON的优点:

      A.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;

      B.易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;

      C.支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析;

      D.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;

      E.因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。

    <2>.JSON的缺点

      A.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;

      B.JSON格式目前在Web Service中推广还属于初级阶段。

     

    3.XML和JSON的优缺点对比

    (1).可读性方面。

            JSON和XML的数据可读性基本相同,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性较好些。

    (2).可扩展性方面。

            XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。

    (3).编码难度方面。

            XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。

    (4).解码难度方面。

            XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。

    (5).流行度方面。

            XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。

    (6).解析手段方面。

            JSON和XML同样拥有丰富的解析手段。

    (7).数据体积方面。

            JSON相对于XML来讲,数据的体积小,传递的速度更快些。

    (8).数据交互方面。

            JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。

    (9).数据描述方面。

            JSON对数据的描述性比XML较差。

    (10).传输速度方面。

            JSON的速度要远远快于XML。

     

    4.XML与JSON数据格式比较

    (1).关于轻量级和重量级

            轻量级和重量级是相对来说的,那么XML相对于JSON的重量级体现在哪呢?应该体现在解析上,XML目前设计了两种解析方式:DOM和 SAX。

    <1>.DOM

            DOM是把一个数据交换格式XML看成一个DOM对象,需要把XML文件整个读入内存,这一点上JSON和XML的原理是一样的,但是XML要考虑父节点和子节点,这一点上JSON的解析难度要小很多,因为JSON构建于两种结构:key/value,键值对的集合;值的有序集合,可理解为数组;

    <2>.SAX

            SAX不需要整个读入文档就可以对解析出的内容进行处理,是一种逐步解析的方法。程序也可以随时终止解析。这样,一个大的文档就可以逐步的、一点一点的展现出来,所以SAX适合于大规模的解析。这一点,JSON目前是做不到得。
    所以,JSON和XML的轻/重量级的区别在于:

           JSON只提供整体解析方案,而这种方法只在解析较少的数据时才能起到良好的效果;
    XML提供了对大规模数据的逐步解析方案,这种方案很适合于对大量数据的处理。

    (2).关于数据格式编码及解析难度

    <1>.在编码方面。

            虽然XML和JSON都有各自的编码工具,但是JSON的编码要比XML简单,即使不借助工具,也可以写出JSON代码,但要写出好的XML代码就有点困难;与XML一样,JSON也是基于文本的,且它们都使用Unicode编码,且其与数据交换格式XML一样具有可读性。

            主观上来看,JSON更为清晰且冗余更少些。JSON网站提供了对JSON语法的严格描述,只是描述较简短。从总体来看,XML比较适合于标记文档,而JSON却更适于进行数据交换处理。

    <2>.在解析方面。

            在普通的web应用领域,开发者经常为XML的解析伤脑筋,无论是服务器端生成或处理XML,还是客户端用 JavaScript 解析XML,都常常导致复杂的代码,极低的开发效率。

            实际上,对于大多数Web应用来说,他们根本不需要复杂的XML来传输数据,XML宣称的扩展性在此就很少具有优势,许多Ajax应用甚至直接返回HTML片段来构建动态Web页面。和返回XML并解析它相比,返回HTML片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。同XML或 HTML片段相比,数据交换格式JSON 提供了更好的简单性和灵活性。在Web Serivice应用中,至少就目前来说XML仍有不可动摇的地位。

    (3).实例比较

            XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。

    <1>.用XML表示中国部分省市数据如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <country>
      <name>中国</name>
      <province>
        <name>黑龙江</name>
        <citys>
          <city>哈尔滨</city>
          <city>大庆</city>
        </citys>    
      </province>
      <province>
        <name>广东</name>
        <citys>
          <city>广州</city>
          <city>深圳</city>
          <city>珠海</city>
        </citys>   
      </province>
      <province>
        <name>台湾</name>
        <citys>
           <city>台北</city>
           <city>高雄</city>
        </citys> 
      </province>
      <province>
        <name>新疆</name>
        <citys>
          <city>乌鲁木齐</city>
        </citys>
      </province>
    </country>

    <2>.用JSON表示中国部分省市数据如下:

    {
        name: "中国",
        provinces: [
            { 
                name: "黑龙江", 
                citys: { 
                    city: ["哈尔滨", "大庆"]
                }
            },
            { 
                name: "广东",
                citys: { 
                    city: ["广州", "深圳", "珠海"]
                } 
            },
            { 
                name: "台湾",
                citys: { 
                    city: ["台北", "高雄"]
                } 
            },
            { 
                name: "新疆", 
                citys: {
                    city: ["乌鲁木齐"]
                }
            }
        ]
    }

     

            编码的可读性来说,XML有明显的优势,毕竟人类的语言更贴近这样的说明结构。JSON读起来更像一个数据块,读起来就比较费解了。不过,我们读起来费解的语言,恰恰是适合机器阅读,所以通过JSON的索引country.provinces[0].name就能够读取“黑龙江”这个值。

            编码的手写难度来说,XML还是舒服一些,好读当然就好写。不过写出来的字符JSON就明显少很多。去掉空白制表以及换行的话,JSON就是密密麻麻的有用数据,而XML却包含很多重复的标记字符。

    展开全文
  • 一、json文件简介 1、json文件 2、json与其他存储数据方式比较 二、C++操作json文件 1、jsoncpp 库下载 2、C++从字符串中读取json 3、C++从文件中读取json 4、C++写入json文件 5、主函数 附:jsoncpp库配置...

    目录

    前言

    一、json文件简介

    1、json文件

    2、json与其他存储数据方式比较

    二、C++操作json文件

    1、jsoncpp 库下载

    2、C++从字符串中读取json

    3、C++从文件中读取json

    4、C++写入json文件

    5、主函数

     附:jsoncpp库配置

    1、解压并转移

    2、配置属性

    3、配置项目


    前言

    json文件是比较轻量级的文件,格式简单,使用方便。用来存放信息相比其他方式有自己得天独厚的优势。

    今天给大家分享的是如何利用C++来操作json文件。

    如果你知道如何使用jsoncpp类库,可以不用看附,如果第一次使用,请先到最后,将环境配置好,再进行操作。

    有人说用这篇文章中配置的方法有问题。我想大家应该是有些小细节跟我做的不一样,为此,我为大家配置好一个,大家可以加群:326866692下载使用。

    包括jsoncpp库也在群文件中。

     

     

    一、json文件简介

    1、json文件

    JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

    2、json与其他存储数据方式比较

    为什么要用json文件呢?

    我们最常使用的存储数据的方式有很多,比如利用txt文件存,利用xml存,利用word存,利用Excel存,如果我们要求比较高,还可以使用数据库存。

    相对于txt,word来说,json格式更加明确,获取重要信息非常方便。

    相对于xml来说,json格式更加简洁,存储同样的文件,花费的内存更小。

    相对于Excel来说,json更适合存储字符类文件。Excel相当于比较简单的数据库了。

    相对于数据库来说,json更加方便,数据库我们还需要做一些设置,安装一些软件。json可以直接使用。

    二、C++操作json文件

    1、jsoncpp 库下载

    大家可以自己上网下载jsoncpp 库,也可以加群:326866692下载;

    群二维码

    2、C++从字符串中读取json

    json样式比较多,这里分享两种,一种比较直接简单的,一种稍微有些复杂的。

    1.简单json样式

    我们定义一个字符串来保存如下json数据:

    {
        "name" : "shuiyixin",
        "age" : "21",
        "sex" : "man"
    }

    读取代码如下:

    void readStrJson()
    {
    	//字符串  
    	const char* str =
    		"{\"name\":\"shuiyixin\",\"age\":\"21\",\"sex\":\"man\"}";
    
    
    	Json::Reader reader;
    	Json::Value root;
    
    	//从字符串中读取数据  
    	if (reader.parse(str, root))
    	{
    		string name = root["name"].asString();
    		int age = root["nomen"].asInt();
    		string sex = root["sex"].asString();
    		cout << name + "," << age << "," << sex <<  endl;
    	}
    
    }

    2.复杂json样式

    所谓复杂,就是说,json里面分好几层,上面那个简单的只有一层,json数据如下:

    {
        "name":"shuiyixin",
        "major":[
        {
            "AI":"MachineLearning"
        },
        {
            "AI":"DeepLearning"
        },
        {
            "AI":"ComputerVision"
        }]
    }

    读取代码如下:

    void readStrProJson()
    {
    	string strValue = "{\"name\":\"shuiyixin\",\"major\":[{\"AI\":\"MachineLearning\"},{\"AI\":\"DeepLearning\"},{\"AI\":\"ComputerVision\"}]}";
    	Json::Reader reader;
    	Json::Value value;
    	if (reader.parse(strValue, value))
    	{
    		string out = value["name"].asString();
    		cout << out << endl;
    		const Json::Value arrayObj = value["major"];
    		for (unsigned int i = 0; i < arrayObj.size(); i++)
    		{
    			out = arrayObj[i]["AI"].asString();
    			cout << out<<endl;
    		}
    	}
    }
    

     

    3、C++从文件中读取json

    从字符串中读取json文件只是为了让大家能够了解json文件,我们最终还是要从文件中读取的。

    这个读取的json文件,大家可以通过下面的写json文件自己创建一个。

    以下面这个json文件为例:

    {
       "age" : 21,
       "friends" : {
          "friend_age" : 21,
          "friend_name" : "ZhaoWuxian",
          "friend_sex" : "man"
       },
       "hobby" : [ "sing", "run", "Tai Chi" ],
       "name" : "shuiyixin",
       "sex" : "man"
    }
    

    读取代码如下:

    void readFileJson()
    {
    	Json::Reader reader;
    	Json::Value root;
    
    	//从文件中读取,保证当前文件有demo.json文件  
    	ifstream in("demo.json", ios::binary);
    
    	if (!in.is_open())
    	{
    		cout << "Error opening file\n";
    		return;
    	}
    
    	if (reader.parse(in, root))
    	{
    		//读取根节点信息  
    		string name = root["name"].asString();
    		int age = root["age"].asInt();
    		string sex = root["sex"].asString();
    
    		cout << "My name is " << name << endl;
    		cout << "I'm " << age << " years old" << endl;
    		cout << "I'm a " << sex << endl;
    
    		//读取子节点信息  
    		string friend_name = root["friends"]["friend_name"].asString();
    		int friend_age = root["friends"]["friend_age"].asInt();
    		string friend_sex = root["friends"]["friend_sex"].asString();
    
    		cout << "My friend's name is " << friend_name << endl;
    		cout << "My friend's sex is "<<friend_sex << endl;
    		cout << "My friend is " << friend_age << " years old" << endl;
    
    		//读取数组信息  
    		cout << "Here's my hobby:" << endl;
    		for (unsigned int i = 0; i < root["hobby"].size(); i++)
    		{
    			string ach = root["hobby"][i].asString();
    			cout << ach << '\t';
    		}
    		cout << endl;
    
    		cout << "Reading Complete!" << endl;
    	}
    	else
    	{
    		cout << "parse error\n" << endl;
    	}
    
    	in.close();
    }
    

    4、C++写入json文件

    除了读,我们经常还会写入json文件,json文件如下:

    {
       "age" : 21,
       "friends" : {
          "friend_age" : 21,
          "friend_name" : "ZhaoWuxian",
          "friend_sex" : "man"
       },
       "hobby" : [ "sing", "run", "Tai Chi" ],
       "name" : "shuiyixin",
       "sex" : "man"
    }
    

    写入代码如下:

    void writeFileJson()
    {
    	//根节点  
    	Json::Value root;
    
    	//根节点属性  
    	root["name"] = Json::Value("shuiyixin");
    	root["age"] = Json::Value(21);
    	root["sex"] = Json::Value("man");
    
    	//子节点  
    	Json::Value friends;
    
    	//子节点属性  
    	friends["friend_name"] = Json::Value("ZhaoWuxian");
    	friends["friend_age"] = Json::Value(21);
    	friends["friend_sex"] = Json::Value("man");
    
    	//子节点挂到根节点上  
    	root["friends"] = Json::Value(friends);
    
    	//数组形式  
    	root["hobby"].append("sing");
    	root["hobby"].append("run");
    	root["hobby"].append("Tai Chi");
    
    	//直接输出  
    	//cout << "FastWriter:" << endl;
    	//Json::FastWriter fw;
    	//cout << fw.write(root) << endl << endl;
    
    	//缩进输出  
    	cout << "StyledWriter:" << endl;
    	Json::StyledWriter sw;
    	cout << sw.write(root) << endl << endl;
    
    	//输出到文件  
    	ofstream os;
    	os.open("demo.json", std::ios::out | std::ios::app);
    	if (!os.is_open())
    		cout << "error:can not find or create the file which named \" demo.json\"." << endl;
    	os << sw.write(root);
    	os.close();
    
    }

    要注意的是:

    1.如果要写入的文件不存在,会自动创建该文件;

    2.如果文件存在,写入过程不会覆盖文件中原有数据,而是将新数据写在原有数据后面。

    5、主函数

    所有的功能模块都写好啦,剩下就是主函数啦:

    #include <string>  
    #include <json.h>
    #include <iostream>  
    #include <fstream>  
    using namespace std;
    
    void readStrJson(); //从字符串中读取JSON  
    void readStrProJson(); //从字符串中读取JSON(内容复杂些)  
    void readFileJson(); //从文件中读取JSON 
    void writeFileJson();  //将信息保存为JSON格式  
    
    int main(int argc, char *argv[])
    {
    	writeFileJson(); //写入json
    
    	readFileJson(); //从文件中读取JSON 
    
    	cout << "\n\n";
    
    	readStrJson();  //从字符串中读json
    
    	cout << "\n\n";
    
    	readStrProJson();//从字符串中读取JSON(内容复杂些)  
    	
    	system("pause");
    	return 0;
    }

     附:jsoncpp库配置

    jsoncpp库配置与opencv配置原理相同,大家可以看一下下面的教程:

    opencv配置(win10+VS2015+OpenCV3.1.0) :https://blog.csdn.net/shuiyixin/article/details/80386022

    不过jsoncpp库的内容比较少,配置没有opencv那么麻烦:

    1、解压并转移

    首先将库解压,将下面的两个文件夹复制到你创建的项目下面

    将库解压
    将两个文件夹复制到自己创建的项目中

    2、配置属性

    点击调试,并点击项目属性

    点击调试->项目属性
    选择VC++目录中的包含目录,点击修改
    将includ文件夹下的json文件路径复制到这里,并保存

    3、配置项目

    将src文件夹下的lib_json文件夹下的cpp文件,添加到源文件中:

    找到src文件夹->lib_json文件夹->所有cpp文件,并复制

     

    添加到源文件中

    然后就可以使用啦。

     

    展开全文
  • json2.js json未定义的解决方案!

    千次下载 热门讨论 2012-12-17 03:56:06
    json2.js json.parse json未定义 的解决方案!
  • Xml转Json需要的jar包

    千次下载 热门讨论 2014-05-20 20:55:31
    XML转Json需要的jar包,解压后导入到自己的项目的lib文件夹下就可以运行啦.例子在我的博客中.http://blog.csdn.net/lovesummerforever/article/details/26396465 能完美运行成功.祝您成功运行
  • C++ Json库ArduinoJson介绍及使用说明

    万次阅读 多人点赞 2019-03-12 12:28:51
    文章目录介绍与下载使用说明使用ArduinoJson助手生成代码总结 介绍与下载 ArduinoJson是一个纯由C++编写的Json库,支持大部分常用的Json数据操作; ArduinoJson比较小巧(目前v6.9版本文件约160K左右大小),...

    介绍与下载

    • ArduinoJson是一个纯由C++编写的Json库,支持大部分常用的Json数据操作;
    • ArduinoJson比较小巧(目前v6.9.1版本文件约160K左右大小),只有一个.h文件,使用时只需引用它即可;
      也可以下载zip文件,然后在Arduino IDE中选择: 项目 > 加载库 > 添加 .ZIP 库
    • 虽然小巧但官方页面一点不含糊,排版合理,资料详细,还提供了一个非常方便的工具;
    • 虽然名字里有Arduino但并非只能用在Arduino里,可以用于所有支持C++的地方;
    • ArduinoJson基于MIT开源协议,也就是说它是可以免费的;
    • 官方主页:https://arduinojson.org/
    • GitHub项目地址:https://github.com/bblanchon/ArduinoJson

    下载方式可以见下图:
    在这里插入图片描述

    使用方法与演示

    本文编写时ArduinoJson更新到v6.9.1版,这里也以v6.9.1版做说明。

    反序列化(Deserialization,解析数据)

    反序列化步骤如下:

    • 引用ArduinoJson库;
    • 声明JsonDocument对象;
    • 尝试反序列化json字符串到JsonDocument对象;
    • 根据需求取用数据;

    使用下面代码进行测试:

    #include "ArduinoJson-v6.9.1.h" //引用ArduinoJson库
    // #include "ArduinoJson.h" //也可以将文件名改为ArduinoJson.h然后这样引用
    
    //声明一个json数据
    char myJson[] = "{\"myChar\":\"hello\",\"myArray\":[13,14],\"myObject\":{\"myFloat\":3.1415926}}";
    
    void setup()
    {
        Serial.begin(115200);
        Serial.println();
    
        StaticJsonDocument<200> doc; //声明一个JsonDocument对象
        // DynamicJsonDocument doc(200); //声明一个JsonDocument对象
    
        DeserializationError error = deserializeJson(doc, myJson); //反序列化JSON数据
    
        // if (error.c_str() == "OK") //检查反序列化是否成功
        if (!error) //检查反序列化是否成功
        {
            //读取json节点
            const char *myC = doc["myChar"]; //等同于const char *myC = doc["myChar"].as<char*>();
            int myN0 = doc["myArray"][0]; //等同于int myN0 = doc["myArray"][0].as<int>();
            int myN1 = doc["myArray"][1]; //等同于int myN1 = doc["myArray"][1].as<int>();
            float myF = doc["myObject"]["myFloat"]; //等同于float myF = doc["myObject"]["myFloat"].as<float>();
    
            Serial.println(myC);
            Serial.println(myN0);
            Serial.println(myN1);
            Serial.println(myF);
            // Serial.println(myF, n); //n指定输出小数位数
        }
    }
    
    void loop()
    {
    }
    

    在这里插入图片描述

    序列化(Serialization,创建数据)

    序列化步骤如下:

    • 引用ArduinoJson库;
    • 声明JsonDocument对象;
    • JsonDocument对象中添加数据;
    • 序列化处理JsonDocument对象使成为json字符串;

    使用下面代码进行测试:

    #include "ArduinoJson-v6.9.1.h" //引用ArduinoJson库
    // #include "ArduinoJson.h" //也可以将文件名改为ArduinoJson.h然后这样引用
    
    void setup()
    {
        Serial.begin(115200);
        Serial.println();
    
        StaticJsonDocument<200> doc; //声明一个JsonDocument对象
        // DynamicJsonDocument doc(200); //声明一个JsonDocument对象
    
        doc["myChar"] = "hello"; //添加一个字符串对象节点
    
        JsonArray myA = doc.createNestedArray("myArray"); //添加一个数组节点
        myA.add(true);                                    //使用add方式添加数据到JsonArray
        myA.add(false);
    
        JsonObject myO = doc.createNestedObject("myObject"); //添加一个对象节点
        myO["myNumber"] = 1234567890;                        //使用[]添加数据到JsonObject
    
        serializeJson(doc, Serial); //序列化JSON数据(压缩形式),并从Serial输出
        // 以下三行输出结果同上面一行
        // char myDoc[measureJson(doc) + 1];
        // serializeJson(doc, myDoc, measureJson(doc) + 1);
        // Serial.println(myDoc);
    
        Serial.println();
        Serial.println();
    
        serializeJsonPretty(doc, Serial); //序列化JSON数据(展开形式),并从Serial输出
        // 以下三行输出结果同上面一行
        // char myDocP[measureJsonPretty(doc) + 1];
        // serializeJsonPretty(doc, myDocP, measureJsonPretty(doc) + 1);
        // Serial.println(myDocP);
    }
    
    void loop()
    {
    }
    

    在这里插入图片描述

    API简单介绍

    对象

    JsonDocument

    • 使用StaticJsonDocument<size> doc;DynamicJsonDocument doc(size);方式声明JsonDocument对象;
    • 使用StaticJsonDocument<size> doc;方式声明的对象将存储在栈内存中,推荐size不大于1K时使用该方式;
    • 使用DynamicJsonDocument doc(size);方式声明的对象将存储在堆内存中,推荐size大于1K时使用该方式;
    • size大小可以根据JsonDocument对象含有的节点数与值和数据长度计算得出,最保险的话可以根据json字符串(压缩形式)的长度len取值,size = len (8bit)size = len*2 (32bit)size = len*4 (64bit)
    • JsonDocument对象可以是JsonArrayJsonObjectJsonVariant三类引用类型;

    JsonDocument对象的部分方法如下:

    • as<T>()
      显式转换数据类型,如果类型不符合则根据类型返回0或空值;

    This function returns a default value if the cast is not possible. The default value is:

    • 0 for numerical types
    • NULL for const char*
    • A null reference for JsonArray and JsonObject.
    • is<T>()
      判断是否为为某类型;
    • add()
      向数组添加数据,添加成功返回true,失败返回false;
    • clear()
      清除并释放内存;
    • createNestedArray()
      创建数组,括号中可以输入数组的键名称,创建成功则返回数组指针,失败则返回空值;
    • createNestedObject()
      创建对象,括号中可以输入对象的键名称,创建成功则返回对象指针,失败则返回空值;
    • operator[]
      返回值定的值,如果该键不存在则根据类型返回0或空值;
    • isNull()
      返回是否为空,空返回true,非空返回false;
    • to<T>()
      清空并转换为指定类型;

    JsonVariant

    JsonVariant是JsonDocument的引用类型,可以表示任何json支持的数据类型,拥有的方法大部分和JsonDocument相同,下面是部分新增的方法:

    • set()
      设置对象的值,设置成功返回ture,失败返回false;
    • 重载了运算符==!=<<=>>=

    引用类型在参数传递使用时拥有更好的性能(毕竟只是引用而已),可以参考下面代码:

    #include "ArduinoJson-v6.9.1.h" //引用ArduinoJson库
    
    //声明一个json数据
    char myJson[] = "{\"myChar\":\"hello\",\"myArray\":[13,14],\"myObject\":{\"myFloat\":3.1415926}}";
    
    void parmPass(JsonVariant parm)
    {
        const char *myC = parm["myChar"];
        int myN0 = parm["myArray"][0];
        int myN1 = parm["myArray"][1];
        float myF = parm["myObject"]["myFloat"];
    
        Serial.println(myC);
        Serial.println(myN0);
        Serial.println(myN1);
        Serial.println(myF);
    }
    
    void setup()
    {
        Serial.begin(115200);
        Serial.println();
    
        StaticJsonDocument<200> doc; //声明一个JsonDocument对象
        DeserializationError error = deserializeJson(doc, myJson); //反序列化JSON数据
        if (!error) //检查反序列化是否成功
        {
            parmPass(doc.as<JsonVariant>()); //将参数传递后打印输出
        }
    }
    
    void loop()
    {
    }
    

    JsonObject

    JsonObject使用基本同JsonVariant,部分方法如下:

    • containsKey()
      测试对象中是否存在某个键,输入参数为键名称,如果存在返回true,不存在返回false;
    • remove()
      移除某个键值对,输入参数为键名称,如果该键值对不存在则不进行操作;
    • size()
      返回对象所包含键值对数量;
    • 没有add()方法;

    JsonArray

    JsonArray使用基本同JsonObject,部分不同如下;

    • 没有containsKey()方法;
    • add()方法;

    序列化与反序列化

    • deserializeJson()
      该方法可以反序列化数据(将字符串解析为json);
      输入参数分别为JsonDocument对象、原始字符串、字符串长度(可选),嵌套深度(可选);
      返回DeserializationError类型错误,取值分别为:
      Ok序列化成功;
      IncompleteInput输入不完整;
      InvalidInput输入无效;
      NoMemoryJsonDocument对象空间不足;
      NotSupported出现不支持的数据类型;
      TooDeep嵌套层数太深;

    • serializeJson()
      该方法可以序列化数据(将JsonDocument对象转换为字符串,压缩形式);
      输入参数分别为JsonDocument对象、目标字符串(或者print到某接口)、字符串长度(可选);
      返回写入字节数;

    • serializeJsonPretty()
      该方法可以序列化数据(将JsonDocument对象转换为字符串,展开形式,其他同上);

    • measureJson()
      计算serializeJson()生成文档大小,不包含停止符;

    • measureJsonPretty()
      计算serializeJsonPretty()生成文档大小,不包含停止符;

    其它

    • json最大嵌套层数
      ArduinoJson库中定义了ARDUINOJSON_DEFAULT_NESTING_LIMIT,该参数表示json最大嵌套层数,可以在库文件中更改该值以改变全局最大嵌套层数;
      也可以使用下面方法临时改变最大嵌套层数:
    deserializeJson(doc, input, DeserializationOption::NestingLimit(20));
    
    • ArduinoJson库版本
      ArduinoJson库中定义了版本信息,相关定义如下:
    #define ARDUINOJSON_VERSION "6.9.1"
    #define ARDUINOJSON_VERSION_MAJOR 6
    #define ARDUINOJSON_VERSION_MINOR 9
    #define ARDUINOJSON_VERSION_REVISION 1
    

    使用ArduinoJson助手生成代码

    ArduinoJson使用太麻烦?JsonDocument该取多大不清楚?没关系使用ArduinoJson Assistant完美解决上述问题,自动生成代码,复制即可使用:
    在这里插入图片描述

    其他说明

    • ArduinoJson v6.7开始JsonDocument必须指定大小,如果想要使用动态长度的话请自行参考使用v6.7以前版本;
    • 字符串使用char[]形式很多时候可以提供更好的性能,因为JsonDocument在处理该类型时只引用它,而在使用其他类型时会将内容拷贝至JsonDocument;

    总结

    ArduinoJson的介绍与使用主要就是上面那些了,更加详细的内容可以参考官网Documentation页中各项内容。

    展开全文
  • Json-c的使用

    千次阅读 2019-09-29 16:46:39
    1.使用json-c前,先在自己的linux上安装json-c的库。 2.函数说明 struct json_object * json_object_new_object(); 说明: 创建个空的json_type_object类型JSON对象。 struct json_object* json_object_new_boolean...
  • JSONObject必包的Jar包及json生成的简单案例

    千次下载 热门讨论 2014-06-24 15:21:50
    JSONObject必包的Jar包及json生成的简单案例 所有commons包的网址: http://commons.apache.org/index.html 组装和解析JSONObject的Json字符串,共需要下面六个包: 1、json-lib 2、commons-beanutils 3、commons-...
  • Newtonsoft.Json.dll 程序文件

    万次下载 热门讨论 2012-11-01 14:05:42
    json对象格式转化,最新版本 Newtonsoft.Json.dll 欢迎大家使用。不需要任何分

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,169,210
精华内容 867,684
关键字:

json