`
wenshao
  • 浏览: 271389 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

欢迎帮忙测试fastjson 1.1.3版本

阅读更多
下载地址:
http://code.alibabatech.com/mvn/snapshots/com/alibaba/fastjson/1.1.3-SNAPSHOT/

这个版本修复了volking反映了List类型序列化时的bug。http://code.alibabatech.com/jira/browse/FASTJSON-70

这个版本引入了一些很酷的特性:
1、支持循环引用
很多用户在初次使用fastjson时都遇到了循环引用的问题,这是反映最多的问题,我越来越认识到支持循环引用的必要性。经过测试,加入循环应用的支持对性能的影响很小,小于5%。我决定在1.1.3加入循环应用支持,而且是缺省打开这个特性。

public static class Department {

    private int                    id;
    private String                 name;

    private Department             parent;
    private Department             root;

    private Collection<Department> children = new ArrayList<Department>();

    public Department(){

    }

    public Department getRoot() {
        return root;
    }

    public void setRoot(Department root) {
        this.root = root;
    }

    public Department(int id, String name){
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Department getParent() {
        return parent;
    }

    public void setParent(Department parent) {
        this.parent = parent;
    }

    public Collection<Department> getChildren() {
        return children;
    }

    public void setChildren(Collection<Department> children) {
        this.children = children;
    }

}


Department tech = new Department(1, "技术部");
tech.setRoot(tech);

{
    Department pt = new Department(2, "平台技术部");
    pt.setParent(tech);
    pt.setRoot(tech);
    tech.getChildren().add(pt);
    {
        Department sysbase = new Department(3, "系统基础");
        sysbase.setParent(pt);
        sysbase.setRoot(tech);
        pt.getChildren().add(sysbase);
    }
}
{
    Department cn = new Department(4, "中文站技术部");
    cn.setParent(tech);
    cn.setRoot(tech);
    tech.getChildren().add(cn);
}

{
    //JSON.toJSONString(tech);
}

{
    String prettyText = JSON.toJSONString(tech;
    System.out.println(prettyText);

    String text = JSON.toJSONString(tech);
    Department dept = JSON.parseObject(text, Department.class);
    Assert.assertTrue(dept == dept.getRoot());
}


输出的内容:
{
	"children":[
		{
			"children":[{
				"children":[],
				"id":3,
				"name":"系统基础",
				"parent":{"$ref":".."},
				"root":{"$ref":"$"}
			}],
			"id":2,
			"name":"平台技术部",
			"parent":{"$ref":".."},
			"root":{"$ref":".."}
		},
		{
			"children":[],
			"id":4,
			"name":"中文站技术部",
			"parent":{"$ref":".."},
			"root":{"$ref":".."}
		}
	],
	"id":1,
	"name":"技术部",
	"root":{"$ref":"@"}
}
{
	"children":[
		{
			"children":[{
				"children":[],
				"id":3,
				"name":"系统基础",
				"parent":{"$ref":".."},  // 上一级引用
				"root":{"$ref":"$"}  // 跟对象引用
			}],
			"id":2,
			"name":"平台技术部",
			"parent":{"$ref":".."},  // 上一级引用
			"root":{"$ref":".."}  // 上一级引用
		},
		{
			"children":[],
			"id":4,
			"name":"中文站技术部",
			"parent":{"$ref":".."},  // 上一级引用
			"root":{"$ref":".."}  // 上一级引用
		}
	],
	"id":1,
	"name":"技术部",
	"root":{"$ref":"@"} // 引用自身
}



2、支持非缺省构造函数和静态工厂方法
基于编码习惯或者安全的原因,一些JavaBean没有缺省构造函数。fastjson 1.13开始支持这个特性。
例如:
public static class Entity {

    private final int    id;
    private final String name;

    @JSONCreator
    public Entity(@JSONField(name = "id") int id, @JSONField(name = "name") String name){
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}


public static class Entity {

    private final int    id;
    private final String name;

    // 静态工厂方法
    @JSONCreator
    public static Entity create(@JSONField(name = "id") int id, @JSONField(name = "name") String name) {
        return new Entity(id, name);
    }

    private Entity(int id, String name){
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}


3、原型
希望以接口的方式来操作json数据,这个特性是借鉴了jackson的功能。
import junit.framework.Assert;
import junit.framework.TestCase;

import com.alibaba.fastjson.JSON;

public class MaterializedInterfaceTest extends TestCase {
    
    public static interface Bean {
        int getId();

        void setId(int value);

        String getName();

        void setName(String value);
    }
    
    public void test_parse() throws Exception {
        String text = "{\"id\":123, \"name\":\"chris\"}";
        Bean bean = JSON.parseObject(text, Bean.class);
        
        // 按接口调用
        Assert.assertEquals(123, bean.getId());
        Assert.assertEquals("chris", bean.getName());
        bean.setId(234);
        Assert.assertEquals(234, bean.getId()); 
    }
}


总结
1.1.3提供的三个新特性,进一步完善了fastjson的功能,这也是一个重要的版本。希望大家帮忙测试,一起打造最好的json processor!
分享到:
评论

相关推荐

    fastjson最新版本jar包

    fastjson最新版本jar包 fastjson-1.2.14.jar

    fastjson 各个 版本 jar

    fastjson-1.1.35.jar ,fastjson-1.1.36.jar ,fastjson-1.1.37.jar ,fastjson-1.1.44.jar ,fastjson-1.2.3.jar,fastjson-1.2.4.jar

    fastjson各版本jar包以及使用方法

    Fastjson曾因某些版本存在安全漏洞而被关注,因此在使用过程中应保持版本更新,及时修复可能的安全风险。此外,避免在不安全的环境中使用`parseObject()`方法,防止恶意输入导致代码执行。 总之,Fastjson作为一款...

    fastjson多个版本 1.2.2、1.2.31、1.2.47、1.2.53、1.2.54、1.2.62、1.2.73、1.2.74版本

    fastjson的多个版本,fastjson 1.2.2版本、 fastjson 1.2.31版本、fastjson 1.2.47版本、fastjson 1.2.53版本、fastjson 1.2.54版本、fastjson 1.2.62版本、fastjson 1.2.73版本、fastjson 1.2.74版本

    Fastjson1.2.47以及之前的所有版本

    对于使用Fastjson 1.2.47及之前版本的开发者和管理员,最重要的是尽快升级到最新版本。Fastjson团队已经修复了这些已知的安全问题,因此更新到1.2.47之后的稳定版本是防止攻击的第一步。此外,可以开启Fastjson的...

    Fastjson扫描测试工具.rar

    在渗透测试中遇到json数据一般都会测试下有没有反序列化,然而JSON库有Fastjson,JackJson,Gson等等,那么怎么判断后端不是Fastjson呢?可以构造特定的payload来进行探测分析

    测试fastjson与protobuf

    标题中的“测试fastjson与protobuf”表明我们将探讨两个在IT领域广泛应用的数据序列化技术:Fastjson和Protocol Buffers(protobuf)。这两个技术都是用于处理JSON和二进制数据格式的工具,各自具有不同的特点和应用...

    fastjson2-2.0.39.zip

    本文将深入探讨Fastjson2-2.0.39版本,解析其核心功能与使用技巧。 Fastjson是阿里巴巴的一个高性能的JSON库,它的主要功能包括JSON字符串与Java对象之间的转换,支持多种复杂的JSON操作。Fastjson2-2.0.39是该库的...

    Fastjson各版本反序列化EXP 1.2.24 1.2.41 1.2.42 1.2.43 1.2.45 48 62 66

    # Fastjson反序列化漏洞为例 1、此时/tmp目录 ![img]...

    fastjson1.2.2版本.jar

    标题中的"fastjson1.2.2版本.jar"指的是FastJSON库的1.2.2版本的Java Archive(JAR)文件,这是一个包含了FastJSON库所有类和资源的打包文件,方便在Java项目中作为依赖使用。 FastJSON的核心功能在于它能够便捷地...

    高版本的fastjson-1.2.71解决安全漏洞.rar

    在标题提到的“高版本的fastjson-1.2.71解决安全漏洞”中,我们主要关注的是Fastjson如何通过更新到1.2.71版本来修复这些已知的安全问题。 Fastjson的安全漏洞通常涉及其自动类型识别机制。这个机制允许JSON字符串...

    fastjson最新版本库1.2.47

    在1.2.47这个版本中,Fastjson 继续优化了性能,提升了稳定性,为开发者提供了更强大的JSON处理能力。 1. **基本概念** - JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时...

    fastJSON_v2.3.5_JSON_windows_V2_

    标题中的"fastJSON_v2.3.5"指的是一个特定版本的FastJSON库,这是一个流行的开源JSON序列化和反序列化库。FastJSON是用C#编写的,它提供了高效且易于使用的API来处理JSON数据。版本号"v2.3.5"表示这是该库的第2.3.5...

    fastjson1.2.24含源码

    Fastjson是阿里巴巴开发的一款高性能的Java JSON库,它具有极快的性能,广泛的功能以及简洁易用的API,使其在Java社区中广受欢迎。Fastjson 1.2.24版本是其发展过程中的一个重要里程碑,该版本包含了完整的源码,...

    FastJsonJar

    《FastJsonJar:Java开发中的高效JSON处理库》 FastJsonJar,正如其名,是一个专为Java开发者设计的高效JSON解析和生成工具。在现代Web服务和移动应用开发中,JSON作为数据交换格式,其使用频率之高不言而喻。...

    各个版本fastJson_jar包最新版

    Fastjson是阿里巴巴开发的一款高性能的Java语言JSON库,它的全称是Fast Java Object to JSON and JSON to Java Object,...在集成测试和生产环境中,建议使用稳定版,并关注官方发布的更新公告,以便及时进行版本升级。

    fastjson-1.2.4.jar

    在这个讨论中,我们将深入探讨Fastjson的核心特性、用法以及1.2.4版本的更新亮点。 1. **核心特性** - **快速解析和生成**:Fastjson拥有极快的解析和生成速度,通过优化的算法设计,能够处理大量JSON数据。 - *...

    fastjson-1.2.9.jar.zip

    在标题中提到的 "fastjson-1.2.9.jar.zip" 是 Fastjson 的一个特定版本,包含的 "fastjson-1.2.9.jar" 文件是该库的可执行 JAR 包,开发者可以直接引入到项目中使用。 **JSON 解析与序列化** 1. **解析 JSON**: ...

    fastjson1.2.9.zip

    《Fastjson:高效便捷的Java JSON库》 Fastjson,由阿里巴巴开发并开源的一个Java库,扮演着数据交换的重要角色,特别是在Java对象与JSON格式之间的转换。它的出现,极大地简化了JSON在Java应用中的处理流程,提升...

    fastjson-1.2.83 针对近期阿里fastjson包漏洞,升级解决

    Fastjson 1.2.80 及之前版本使用黑白名单用于防御反序列化漏洞,经研究该防御策略在特定条件下可绕过默认 autoType 关闭限制,攻击远程服务器,风险影响较大。建议 Fastjson 用户尽快采取安全措施保障系统安全

Global site tag (gtag.js) - Google Analytics