betway必威-betway必威官方网站
做最好的网站

Json操作库DynamicJson使用指南,可以像Javascript一样

Json的简介

序列化成json字符串

// 声明一个匿名对象
           var obj = new
           {
               Name = "Foo",
               Age = 30,
               Address = new
               {
                   Country = "Japan",
                   City = "Tokyo"
               },
               Like = new[] { "Microsoft", "Xbox" }
           };
           // 序列化
           // {"Name":"Foo","Age":30,"Address":{"Country":"Japan","City":"Tokyo"},"Like":["Microsoft","Xbox"]}
           var jsonStringFromObj = DynamicJson.Serialize(obj);

           // 还支持直接序列化数组,集合
           // [{"foo":"fooooo!","bar":1000},{"foo":"orz","bar":10}]
           var foobar = new FooBar[] {
               new FooBar { foo = "fooooo!", bar = 1000 },
               new FooBar { foo = "orz", bar = 10 }
           };
           // 序列化
           var jsonFoobar = DynamicJson.Serialize(foobar);

        摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C 、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。

  1. 数据格式比较简单,易于读写,格式都是压缩的,占用带宽小
  2. 易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;
  3. 支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析;
  4. 在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;
  5. 因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。

例子一:TwitterAPI

static void Main()
{
    var publicTL = new WebClient().DownloadString(@"http://twitter.com/statuses/public_timeline.json");
    var statuses = DynamicJson.Parse(publicTL);
    foreach (var status in statuses)
    {
        Console.WriteLine(status.user.screen_name);
        Console.WriteLine(status.text);
    }
}

四、JSONObject的过滤设置

通常对一个json串和java对象进行互转时,经常会有选择性的过滤掉一些属性值。例如下面的类:

package com.mucfc.json;

public class Employer {

    private String name;

    private Integer age;

    private String department;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    @Override
    public String toString() {
        return "Employer [name="   name   ", age="   age   ", department="
                  department   "]";
    }

}

如果我想过滤age属性怎么办?

方法一:实现JSONString接口

package com.mucfc.json;

import net.sf.json.JSONString;

public class Employer implements JSONString{

    private String name;

    private Integer age;

    private String department;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    @Override
    public String toString() {
        return "Employer [name="   name   ", age="   age   ", department="
                  department   "]";
    }

    @Override
    public String toJSONString() {
        return "{"name":""   name   "","department":""   department   ""}";
    }

}

必威官方网站 1

方法二:设置jsonconfig实例,对包含和需要排除的属性进行添加或删除。

  /**
     * bean对象转json,带过滤器
     * @return void
     */
    public static void beanToJson1(){
        Employer employer=new Employer();
        employer.setName("小王");
        employer.setAge(23);
        employer.setDepartment("产品研发");
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setExcludes(new String[]
        { "age" });
        JSONObject json = JSONObject.fromObject(employer, jsonConfig);
        System.out.println("-----------------------------------------beanToJson1()带过滤器 开始------------------------------------------------");
        System.out.println(json.toString());
        System.out.println("-----------------------------------------beanToJson1()带过滤器 结束------------------------------------------------");
    }

必威官方网站 2

方法三:使用propertyFilter实例过滤属性

 /**
     * bean对象转json,带过滤器
     * @return void
     */
    public static void beanToJson2(){
        Employer employer=new Employer();
        employer.setName("小王");
        employer.setAge(23);
        employer.setDepartment("产品研发");
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
            public boolean apply(Object source, String name, Object value)
            {
                return source instanceof Employer && name.equals("age");
            }
        });
        JSONObject json = JSONObject.fromObject(employer, jsonConfig);
        System.out.println("-----------------------------------------beanToJson2() 带过滤器 开始------------------------------------------------");
        System.out.println(json.toString());
        System.out.println("-----------------------------------------beanToJson2() 带过滤器 结束------------------------------------------------");
    }

必威官方网站 3

java工程下载

// 直接遍历json数组
      var arrayJson = DynamicJson.Parse(@"[1,10,200,300]");
      foreach (int item in arrayJson)
      {
        Console.WriteLine(item); // 1, 10, 200, 300
      }

      // 直接遍历json对象
      var objectJson = DynamicJson.Parse(@"{""foo"":""json"",""bar"":100}");
      foreach (KeyValuePair<string, dynamic> item in objectJson)
      {
        Console.WriteLine(item.Key   ":"   item.Value); // foo:json, bar:100
      }

读取、获取

// 将Json字符串解析成DynamicJson对象
var json = DynamicJson.Parse(@"{""foo"":""json"", ""bar"":100, ""nest"":{ ""foobar"":true } }");

var r1 = json.foo; // "json" - string类型
var r2 = json.bar; // 100 - double类型
var r3 = json.nest.foobar; // true - bool类型
var r4 = json["nest"]["foobar"]; // 还可以和javascript一样通过索引器获取

林炳文Evankaka原创作品。转载请注明出处    

简易操作Json

 

DynamicJson是专门为.NET程序员开发的Json操作库,其源码非常简单,仅仅只有400行代码,一个对应的class类,目前只支持.NET 4.0以上的.NET Framework。

 

一、准备工作

       json是个非常重要的数据结构,在web开发中应用十分广泛。我觉得每个人都应该好好的去研究一下json的底层实现,分析一下json的相关内容,希望大家能有所收获。首先给大家说一下使用json前的准备工作,需要准备下面的六个jar包:

必威官方网站 4

       这里我统一下好打包了,可以在这里来下

需要说明几点:
(1)json-lib最新版本可以从这个地方下载:
(2)ezmorph是一个简单的java类库,用于将一种bean转换成另外一种bean。其动态bean的实现依赖于commons-beanutils包。ezmorph可以在这个地方下载源码:
(3)commons-beanutils是操作Java Bean的类库,依赖于commons-collections。可以从这里下载:

(4)commons-collections类库是各种集合类和集合工具类的封装。可以从这里下载:

// 声明一个匿名对象
      var obj = new
      {
        Name = "Foo",
        Age = 30,
        Address = new
        {
          Country = "Japan",
          City = "Tokyo"
        },
        Like = new[] { "Microsoft", "Xbox" }
      };
      // 序列化
      // {"Name":"Foo","Age":30,"Address":{"Country":"Japan","City":"Tokyo"},"Like":["Microsoft","Xbox"]}
      var jsonStringFromObj = DynamicJson.Serialize(obj);

      // 还支持直接序列化数组,集合
      // [{"foo":"fooooo!","bar":1000},{"foo":"orz","bar":10}]
      var foobar = new FooBar[] {
        new FooBar { foo = "fooooo!", bar = 1000 },
        new FooBar { foo = "orz", bar = 10 }
      };
      // 序列化
      var jsonFoobar = DynamicJson.Serialize(foobar);
  

转换和反序列化

public class FooBar
        {
            public string foo { get; set; }
            public int bar { get; set; }
        }

var arrayJson = DynamicJson.Parse(@"[1,10,200,300]");
            var objectJson = DynamicJson.Parse(@"{""foo"":""json"",""bar"":100}");

            // 将json数组转成C#数组
            // 方法一:
            var array1 = arrayJson.Deserialize<int[]>();
            // 方法二
            var array2 = (int[])arrayJson;
            // 方法三,这种最简单,直接声明接收即可,推荐使用
            int[] array3 = arrayJson;

            // 将json字符串映射成C#对象
            // 方法一:
            var foobar1 = objectJson.Deserialize<FooBar>();
            // 方法二:

            var foobar2 = (FooBar)objectJson;
            // 方法三,这种最简单,直接声明接收即可,推荐使用
            FooBar foobar3 = objectJson;

            // 还可以通过Linq进行操作
            var objectJsonList = DynamicJson.Parse(@"[{""bar"":50},{""bar"":100}]");
            var barSum = ((FooBar[])objectJsonList).Select(fb => fb.bar).Sum(); // 150
            var dynamicWithLinq = ((dynamic[])objectJsonList).Select(d => d.bar);

二、语法相关

  • JSON 语法规则

JSON 语法是 JavaScript 对象表示法语法的子集。
        数据在名称/值对中
       数据由逗号分隔
      花括号保存对象
      方括号保存数组

  • JSON 值

JSON 值可以是:
      数字(整数或浮点数)
     字符串(在双引号中)
     逻辑值(true 或 false)
     数组(在方括号中)
      对象(在花括号中)
     null

  • JSON有两种表示结构

对象和数组。
对象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,语法结构如代码。

{
    key1:value1,
    key2:value2,
    ...
}

{"department":"产品研发","name":"小王","age":23}

其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组

数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成,语法结构如代码。

[
    {
        key1:value1,
        key2:value2 
    },
    {
         key3:value3,
         key4:value4   
    }
]

如:

[{"department":"产品研发","name":"小王","age":23},{"department":"产品研发","name":"小王","age":23}]
// 将Json字符串解析成DynamicJson对象
      var json = DynamicJson.Parse(@"{""foo"":""json"", ""bar"":100, ""nest"":{ ""foobar"":true } }");

      // 判断json字符串中是否包含指定键
      var b1_1 = json.IsDefined("foo"); // true
      var b2_1 = json.IsDefined("foooo"); // false
      // 上面的判断还可以更简单,直接通过json.键()就可以判断
      var b1_2 = json.foo(); // true
      var b2_2 = json.foooo(); // false;


      // 新增操作
      json.Arr = new string[] { "NOR", "XOR" }; // 新增一个js数组
      json.Obj1 = new { }; // 新增一个js对象
      json.Obj2 = new { foo = "abc", bar = 100 }; // 初始化一个匿名对象并添加到json字符串中

      // 删除操作
      json.Delete("foo");
      json.Arr.Delete(0);
      // 还可以更简单去删除,直接通过json(键); 即可删除。
      json("bar");
      json.Arr(1);

      // 替换操作
      json.Obj1 = 5000;

      // 创建一个新的JsonObject
      dynamic newjson = new DynamicJson();
      newjson.str = "aaa";
      newjson.obj = new { foo = "bar" };

      // 直接序列化输出json字符串
      var jsonstring = newjson.ToString(); // {"str":"aaa","obj":{"foo":"bar"}}

Json的简介

 

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C 、C#、Java、JavaScript、Perl、 Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

                                                                    来自百度百科的介绍

 

三、Java中使用Json基本使用方法

工程免费下载

Jar包我也上传了,在这里

整个工程目录 如下 :

必威官方网站 5

Employer.java如下

package com.mucfc.json;

import net.sf.json.JSONString;

public class Employer {

    private String name;

    private Integer age;

    private String department;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    @Override
    public String toString() {
        return "Employer [name="   name   ", age="   age   ", department="
                  department   "]";
    }

/*  @Override  要调用这个方法请implements JSONString
    public String toJSONString() {
        return "{"name":""   name   "","department":""   department   ""}";
    }*/

}

JsonTest.java全部代码如下:

package com.mucfc.json;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.PropertyFilter;

/**
 *Json使用方法总结
 *@author linbingwen(博客:http://blog.csdn.net/evankaka)
 *@since 2015.7.3
 */
public class JsonTest {

    public static void main(String args[]){
        beanToJson();
        beanToJson1();
        beanToJson2();
        arrayToJson();
        listToJson();       
        mapToJson();

    }


    /**
     * bean对象转json
     * @return void
     */
    public static void beanToJson(){
        Employer employer=new Employer();
        employer.setName("小王");
        employer.setAge(23);
        employer.setDepartment("产品研发");
        JSONObject json = JSONObject.fromObject(employer);
        System.out.println("-----------------------------------------beanToJson() 开始------------------------------------------------");
        System.out.println(json.toString());
        System.out.println("-----------------------------------------beanToJson() 结束------------------------------------------------");
    }

    /**
     * bean对象转json,带过滤器
     * @return void
     */
    public static void beanToJson1(){
        Employer employer=new Employer();
        employer.setName("小王");
        employer.setAge(23);
        employer.setDepartment("产品研发");
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setExcludes(new String[]
        { "age" });
        JSONObject json = JSONObject.fromObject(employer, jsonConfig);
        System.out.println("-----------------------------------------beanToJson1()带过滤器 开始------------------------------------------------");
        System.out.println(json.toString());
        System.out.println("-----------------------------------------beanToJson1()带过滤器 结束------------------------------------------------");
    }

    /**
     * bean对象转json,带过滤器
     * @return void
     */
    public static void beanToJson2(){
        Employer employer=new Employer();
        employer.setName("小王");
        employer.setAge(23);
        employer.setDepartment("产品研发");
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
            public boolean apply(Object source, String name, Object value)
            {
                return source instanceof Employer && name.equals("age");
            }
        });
        JSONObject json = JSONObject.fromObject(employer, jsonConfig);
        System.out.println("-----------------------------------------beanToJson2() 带过滤器 开始------------------------------------------------");
        System.out.println(json.toString());
        System.out.println("-----------------------------------------beanToJson2() 带过滤器 结束------------------------------------------------");
    }

    /**
     * array对象转json
     * @return void
     */
    public static void arrayToJson(){
        Employer employer1=new Employer();
        employer1.setName("小王");
        employer1.setAge(23);
        employer1.setDepartment("产品研发");

        Employer employer2=new Employer();
        employer2.setName("小王");
        employer2.setAge(23);
        employer2.setDepartment("产品研发");        
        Employer[] employers=new Employer[]{employer1,employer2};
        JSONArray json = JSONArray.fromObject(employers);
        System.out.println("-----------------------------------------arrayToJson() 开始------------------------------------------------");
        System.out.println(json.toString());
        System.out.println("-----------------------------------------arrayToJson() 结束------------------------------------------------");
    }

    /**
     * list对象转json
     * @return void
     */
    public static void listToJson(){
        List<String> list = new ArrayList<String>();
        list.add( "first" );
        list.add( "second" );
        JSONArray json = JSONArray.fromObject(list);
        System.out.println("-----------------------------------------listToJson() 开始------------------------------------------------");
        System.out.println(json.toString());
        System.out.println("-----------------------------------------listToJson() 结束------------------------------------------------");
    }

    /**
     * map对象转json
     * @return void
     */
    public static void mapToJson(){
        Map<Object,Object> map = new HashMap<Object,Object>();
        map.put("name", "json");
        map.put("bool", Boolean.TRUE);
        map.put("int", new Integer(1));
        map.put("arr", new String[] { "a", "b" });
        map.put("func", "function(i){ return this.arr[i]; }");
        JSONObject json = JSONObject.fromObject(map);
        System.out.println("-----------------------------------------mapToJson() 开始------------------------------------------------");
        System.out.println(json.toString());
        System.out.println("-----------------------------------------mapToJson() 结束------------------------------------------------");
    }


}

下面分别对各个部分来进行说明

  1. Bean转换成json代码

    /**

      * bean对象转json
      * @return void
      */
     public static void beanToJson(){
         Employer employer=new Employer();
         employer.setName("小王");
         employer.setAge(23);
         employer.setDepartment("产品研发");
         JSONObject json = JSONObject.fromObject(employer);
         System.out.println("-----------------------------------------beanToJson() 开始------------------------------------------------");
         System.out.println(json.toString());
         System.out.println("-----------------------------------------beanToJson() 结束------------------------------------------------");
     }
    

运行结果如下:

必威官方网站 6

  1. 数组转换成json代码

    /**

      * array对象转json
      * @return void
      */
     public static void arrayToJson(){
         Employer employer1=new Employer();
         employer1.setName("小王");
         employer1.setAge(23);
         employer1.setDepartment("产品研发");
    
         Employer employer2=new Employer();
         employer2.setName("小王");
         employer2.setAge(23);
         employer2.setDepartment("产品研发");        
         Employer[] employers=new Employer[]{employer1,employer2};
         JSONArray json = JSONArray.fromObject(employers);
         System.out.println("-----------------------------------------arrayToJson() 开始------------------------------------------------");
         System.out.println(json.toString());
         System.out.println("-----------------------------------------arrayToJson() 结束------------------------------------------------");
     }
    

运行结果如下:

必威官方网站 7

  1. List集合转换成json方法

    /**

      * list对象转json
      * @return void
      */
     public static void listToJson(){
         List<String> list = new ArrayList<String>();
         list.add( "first" );
         list.add( "second" );
         JSONArray json = JSONArray.fromObject(list);
         System.out.println("-----------------------------------------listToJson() 开始------------------------------------------------");
         System.out.println(json.toString());
         System.out.println("-----------------------------------------listToJson() 结束------------------------------------------------");
     }
    

运行结果如下:
                                           必威官方网站 8

  1. Map集合转换成json方法

    /**

      * map对象转json
      * @return void
      */
     public static void mapToJson(){
         Map<Object,Object> map = new HashMap<Object,Object>();
         map.put("name", "json");
         map.put("bool", Boolean.TRUE);
         map.put("int", new Integer(1));
         map.put("arr", new String[] { "a", "b" });
         map.put("func", "function(i){ return this.arr[i]; }");
         JSONObject json = JSONObject.fromObject(map);
         System.out.println("-----------------------------------------mapToJson() 开始------------------------------------------------");
         System.out.println(json.toString());
         System.out.println("-----------------------------------------mapToJson() 结束------------------------------------------------");
     }
    

运行结果如下:
                                         必威官方网站 9

转换和反序列化

生成xml字符串

var obj = DynamicJson.Parse(@"{""tes"":10,""nest"":{""a"":0}");
var xmlStr=obj.xml;

六、XML与JSON对比

  • XML定义

扩展标记语言 (Extensible Markup Language, XML),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML使用DTD(document type definition)文档类型定义来组织数据;?格式统一,跨平台和语言,早已成为业界公认的标准。
XML是标准通用标记语言(SGML) 的子集,非常适合Web 传输。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

  • 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的一个子集。

  • XML和JSON优缺点

(1).XML的优缺点
<1>.XML的优点
A.格式统一,符合标准;
B.容易与其他系统进行远程交互,数据共享比较方便。
<2>.XML的缺点
A.XML文件庞大,文件格式复杂,传输占带宽;
B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;D.服务器端和客户端解析XML花费较多的资源和时间。

  • 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中推广还属于初级阶段。

下载DynamicJson.dll,然后在项目中添加引用,下载地址如下:

其他(冲突问题,编译不通过问题)

var nestJson = DynamicJson.Parse(@"{""tes"":10,""nest"":{""a"":0}");

            nestJson.nest(); // 判断是否存在nest属性
            nestJson.nest("a"); // 删除nest属性中的a属性

            // 处理json中的键和C#的类型冲突导致编译失败,或语法提示错误,只需要在前面加@前缀即可
            var json = DynamicJson.Parse(@"{""int"":10,""event"":null}");
            var r1 = json.@int; // 10.0
            var r2 = json.@event; // null

五、JavaScript中使用JSON

        本节工程免费下载

        JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。

之前我一直有个困惑,分不清普通字符串

1、json字符串和json对象的区别。
字符串:这个很好解释,指使用“”双引号或’’单引号包括的字符。例如:var comStr = 'this is string';
json字符串:指的是符合json格式要求的js字符串。例如:var jsonStr = "{StudentID:'100',Name:'tmac',Hometown:'usa'}";
json对象:指符合json格式要求的js对象。例如:var jsonObj = { StudentID: "100", Name: "tmac", Hometown: "usa" };

2、JSON 实例 - 来自字符串的对象

创建包含 JSON 语法的 JavaScript 字符串:

var txt = '{ "employees" : ['  
'{ "firstName":"John" , "lastName":"Doe" },'  
'{ "firstName":"Anna" , "lastName":"Smith" },'  
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';

        由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:

var obj = eval ("("   txt   ")");

如下格式:

<!DOCTYPE html>
<html>
<body>
<h2>Create Object from JSON String</h2>
<p>
First Name: <br> 
Last Name: <br> 
</p> 
<script>
var txt = '{"employees":['  
'{"firstName":"John","lastName":"Doe" },'  
'{"firstName":"Anna","lastName":"Smith" },'  
'{"firstName":"Peter","lastName":"Jones" }]}';

var obj = eval ("("   txt   ")");

document.getElementById("fname").innerHTML=obj.employees[1].firstName 
document.getElementById("lname").innerHTML=obj.employees[1].lastName 
</script>
</body>
</html>       

输出结果:

必威官方网站 10

不过eval解析json有安全隐患!现在大多数浏览器(IE8及以上,Chrome和Firefox差不多全部)自带原生JSON对象,提供JSON.parse()方法解析JSON,提供JSON.stringify()方法生成JSON,请使用这两个方法!

如果担心parse()对对象抛异常,可以加一个封装函数:

JSON.pParse = function( tar ) {
    if( typeof( tar ) === 'string' ) {
        return JSON.parse( tar );
    } else {
        return tar;
    }
};

1、从JSON中读数据

//1,从JSON中读数据
function ReadJSON() {
    alert(obj.key1); 
    alert(obj.key2); 

    alert(obj.person[0].name); //或者alert(obj.person[0]["name"])
    alert(obj.object.msg); //或者alert(obj.object["msg"])
}

必威官方网站 11

2、增加JSON中的数据

function Add() { 
    //往JSON对象中增加了一条记录
    obj.sex= "男" //或者obj["sex"]="男"
    alert(obj.sex);
}

必威官方网站 12

3、更新JSON中的数据
function Update() {
    obj.count = 10; //或obj["count"]=10
}

必威官方网站 13

4、删除JSON中的数据

function Delete() {
    delete obj.count;
}

必威官方网站 14

5、遍历JSON中的数据

function Traversal() {
    for (var c in obj) {
        console.log(c   ":", obj[c]);
    }
}

必威官方网站 15

您可能感兴趣的文章:

  • javascript JSON操作入门实例
  • Json对象与Json字符串互转(4种转换方式)
  • js 将json字符串转换为json对象的方法解析
  • js中将字符串转换成json的三种方式
  • 解析JSON对象与字符串之间的相互转换
  • JSON.stringify 语法实例讲解
  • JS对象与JSON格式数据相互转换
  • Json序列化和反序列化方法解析
  • 浅析JSON序列化与反序列化
  • JS实现json的序列化和反序列化功能示例
  • JavaScript常见JSON操作实例分析

例子二:TwitterAPI2

static void Main(string[] args)
{
    var wc = new WebClient();
    var statuses = Enumerable.Range(1, 5)
        .Select(i =>
            wc.DownloadString("http://twitter.com/statuses/user_timeline/neuecc.json?page="   i))
        .SelectMany(s => (dynamic[])DynamicJson.Parse(s))
        .OrderBy(j => j.id);

    foreach (var status in statuses)
    {
        Console.WriteLine(status.text);
    }
}

看到这里,是不是觉得很爽,赶快让你的项目集成DynamicJson吧。

 

传统操作Json

遍历

// 直接遍历json数组
           var arrayJson = DynamicJson.Parse(@"[1,10,200,300]");
           foreach (int item in arrayJson)
           {
               Console.WriteLine(item); // 1, 10, 200, 300
           }

           // 直接遍历json对象
           var objectJson = DynamicJson.Parse(@"{""foo"":""json"",""bar"":100}");
           foreach (KeyValuePair<string, dynamic> item in objectJson)
           {
               Console.WriteLine(item.Key   ":"   item.Value); // foo:json, bar:100
           }
public class FooBar
    {
      public string foo { get; set; }
      public int bar { get; set; }
    }

var arrayJson = DynamicJson.Parse(@"[1,10,200,300]");
      var objectJson = DynamicJson.Parse(@"{""foo"":""json"",""bar"":100}");

      // 将json数组转成C#数组
      // 方法一:
      var array1 = arrayJson.Deserialize<int[]>();
      // 方法二
      var array2 = (int[])arrayJson;
      // 方法三,这种最简单,直接声明接收即可,推荐使用
      int[] array3 = arrayJson;

      // 将json字符串映射成C#对象
      // 方法一:
      var foobar1 = objectJson.Deserialize<FooBar>();
      // 方法二:

      var foobar2 = (FooBar)objectJson;
      // 方法三,这种最简单,直接声明接收即可,推荐使用
      FooBar foobar3 = objectJson;

      // 还可以通过Linq进行操作
      var objectJsonList = DynamicJson.Parse(@"[{""bar"":50},{""bar"":100}]");
      var barSum = ((FooBar[])objectJsonList).Select(fb => fb.bar).Sum(); // 150
      var dynamicWithLinq = ((dynamic[])objectJsonList).Select(d => d.bar);

判断,新增,更新,删除,替换,还可以输出新的Json字符串

// 将Json字符串解析成DynamicJson对象
            var json = DynamicJson.Parse(@"{""foo"":""json"", ""bar"":100, ""nest"":{ ""foobar"":true } }");

            // 判断json字符串中是否包含指定键
            var b1_1 = json.IsDefined("foo"); // true
            var b2_1 = json.IsDefined("foooo"); // false
            // 上面的判断还可以更简单,直接通过json.键()就可以判断
            var b1_2 = json.foo(); // true
            var b2_2 = json.foooo(); // false;


            // 新增操作
            json.Arr = new string[] { "NOR", "XOR" }; // 新增一个js数组
            json.Obj1 = new { }; // 新增一个js对象
            json.Obj2 = new { foo = "abc", bar = 100 }; // 初始化一个匿名对象并添加到json字符串中

            // 删除操作
            json.Delete("foo");
            json.Arr.Delete(0);
            // 还可以更简单去删除,直接通过json(键); 即可删除。
            json("bar");
            json.Arr(1);

            // 替换操作
            json.Obj1 = 5000;

            // 创建一个新的JsonObject
            dynamic newjson = new DynamicJson();
            newjson.str = "aaa";
            newjson.obj = new { foo = "bar" };

            // 直接序列化输出json字符串
            var jsonstring = newjson.ToString(); // {"str":"aaa","obj":{"foo":"bar"}}

本文由betway必威发布于网页设计,转载请注明出处:Json操作库DynamicJson使用指南,可以像Javascript一样

Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。