标签: jackson

如何使用Jackson对一系列对象进行反序列化

杰克逊的数据绑定的文档表明,杰克逊支持deserialising"所有支持类型的数组",但我想不通这个确切的语法.

对于单个对象,我会这样做:

//json input
{
    "id" : "junk",
    "stuff" : "things"
}

//Java
MyClass instance = objectMapper.readValue(json, MyClass.class);
Run Code Online (Sandbox Code Playgroud)

现在对于一个数组我想这样做:

//json input
[{
    "id" : "junk",
    "stuff" : "things"
},
{
    "id" : "spam",
    "stuff" : "eggs"
}]

//Java
List<MyClass> entries = ?
Run Code Online (Sandbox Code Playgroud)

有人知道是否有一个神奇的缺失命令?如果没有那么解决方案是什么?

java json jackson

711
推荐指数
9
解决办法
56万
查看次数

如果值为null,如何告诉Jackson在序列化期间忽略某个字段?

如果该字段的值为null,Jackson如何配置为在序列化期间忽略字段值.

例如:

public class SomeClass {
   // what jackson annotation causes jackson to skip over this value if it is null but will 
   // serialize it otherwise 
   private String someValue; 
}
Run Code Online (Sandbox Code Playgroud)

java jackson

658
推荐指数
11
解决办法
55万
查看次数

杰克逊与JSON:未被识别的领域,没有标记为可忽略

我需要将某个JSON字符串转换为Java对象.我正在使用Jackson进行JSON处理.我无法控制输入JSON(我从Web服务中读取).这是我的输入JSON:

{"wrapper":[{"id":"13","name":"Fred"}]}
Run Code Online (Sandbox Code Playgroud)

这是一个简化的用例:

private void tryReading() {
    String jsonStr = "{\"wrapper\"\:[{\"id\":\"13\",\"name\":\"Fred\"}]}";
    ObjectMapper mapper = new ObjectMapper();  
    Wrapper wrapper = null;
    try {
        wrapper = mapper.readValue(jsonStr , Wrapper.class);
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("wrapper = " + wrapper);
}
Run Code Online (Sandbox Code Playgroud)

我的实体类是:

public Class Student { 
    private String name;
    private String id;
    //getters & setters for name & id here
}
Run Code Online (Sandbox Code Playgroud)

My Wrapper类基本上是一个容器对象,用于获取我的学生列表:

public Class Wrapper {
    private List<Student> students;
    //getters & setters here
}
Run Code Online (Sandbox Code Playgroud)

我一直收到这个错误,"包装"返回null.我不确定缺少什么.有人可以帮忙吗?

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: 
    Unrecognized field …
Run Code Online (Sandbox Code Playgroud)

java data-binding json jackson

602
推荐指数
30
解决办法
69万
查看次数

使用Jackson忽略JSON对象上的新字段

我正在使用Jackson JSON库将一些JSON对象转换为Android应用程序上的POJO类.问题是,JSON对象可能会更改并在应用程序发布时添加新字段,但是当添加一个简单的String字段时,它会崩溃,这可以安全地忽略.

有没有办法告诉杰克逊忽略新添加的字段?(例如,POJO对象上不存在)?全球忽视将是伟大的.

java json jackson

592
推荐指数
11
解决办法
45万
查看次数

JsonMappingException:找不到类型[simple type,class]的合适构造函数:无法从JSON对象实例化

我在尝试获取JSON请求并处理它时收到以下错误:

org.codehaus.jackson.map.JsonMappingException:找不到类型[simple type,class com.myweb.ApplesDO]的合适构造函数:无法从JSON对象实例化(需要添加/启用类型信息?)

这是我要发送的JSON:

{
  "applesDO" : [
    {
      "apple" : "Green Apple"
    },
    {
      "apple" : "Red Apple"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

在Controller中,我有以下方法签名:

@RequestMapping("showApples.do")
public String getApples(@RequestBody final AllApplesDO applesRequest){
    // Method Code
}
Run Code Online (Sandbox Code Playgroud)

AllApplesDO是ApplesDO的包装器:

public class AllApplesDO {

    private List<ApplesDO> applesDO;

    public List<ApplesDO> getApplesDO() {
        return applesDO;
    }

    public void setApplesDO(List<ApplesDO> applesDO) {
        this.applesDO = applesDO;
    }
}
Run Code Online (Sandbox Code Playgroud)

ApplesDO:

public class ApplesDO {

    private String apple;

    public String getApple() {
        return apple;
    }

    public void setApple(String appl) { …
Run Code Online (Sandbox Code Playgroud)

java spring json annotations jackson

422
推荐指数
11
解决办法
40万
查看次数

Jackson JSON和Hibernate JPA问题的无限递归

在尝试将具有双向关联的JPA对象转换为JSON时,我不断获取

org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError)
Run Code Online (Sandbox Code Playgroud)

我找到的只是这个线程,基本上建议避免双向关联.有没有人对这个春天的bug有一个解决方法?

------编辑2010-07-24 16:26:22 -------

Codesnippets:

业务对象1:

@Entity
@Table(name = "ta_trainee", uniqueConstraints = {@UniqueConstraint(columnNames = {"id"})})
public class Trainee extends BusinessObject {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    @Column(name = "id", nullable = false)
    private Integer id;

    @Column(name = "name", nullable = true)
    private String name;

    @Column(name = "surname", nullable = true)
    private String surname;

    @OneToMany(mappedBy = "trainee", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @Column(nullable = true)
    private Set<BodyStat> bodyStats;

    @OneToMany(mappedBy = "trainee", fetch = FetchType.EAGER, …
Run Code Online (Sandbox Code Playgroud)

java orm json spring-mvc jackson

375
推荐指数
15
解决办法
26万
查看次数

在JSON中表示null

在JSON中返回空值的首选方法是什么?原语是否有不同的偏好?

例如,如果服务器上的对象有一个名为"myCount"且没有值的Integer,那么该值的最正确的JSON将是:

{}
Run Code Online (Sandbox Code Playgroud)

要么

{
    "myCount": null
}
Run Code Online (Sandbox Code Playgroud)

要么

{
    "myCount": 0
}
Run Code Online (Sandbox Code Playgroud)

字符串的相同问题 - 如果我在服务器上有一个空字符串"myString",则是最好的JSON:

{}
Run Code Online (Sandbox Code Playgroud)

要么

{
    "myString": null
}
Run Code Online (Sandbox Code Playgroud)

要么

{
    "myString": ""
}
Run Code Online (Sandbox Code Playgroud)

或者(上帝帮助我)

{
    "myString": "null"
}
Run Code Online (Sandbox Code Playgroud)

我喜欢集合的约定在JSON中表示为空集合http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html

将显示一个空数组:

{
    "myArray": []
}
Run Code Online (Sandbox Code Playgroud)

编辑摘要

"个人偏好"的观点似乎是现实的,但很短暂,因为社区将消耗更多不同的服务/来源.JSON结构的约定将有助于规范化所述服务的消耗和重用.就建立标准而言,我建议采用大多数杰克逊公约,但有一些例外:

  • 对象比基元更受欢迎.
  • 空集合优先于null.
  • 没有值的对象表示为null.
  • 基元返回它们的价值.

如果要返回一个主要为空值的JSON对象,则可能有一个候选者可以重构为多个服务.

{

    "value1": null,

    "value2": null,

    "text1": null,

    "text2": "hello",

    "intValue": 0, //use primitive only if you are absolutely sure the answer is 0

    "myList": [],

    "myEmptyList": null, //NOT BEST PRACTICE - return [] instead …
Run Code Online (Sandbox Code Playgroud)

json jackson gson

365
推荐指数
5
解决办法
44万
查看次数

杰克逊VS. GSON

在搜索了一些现有的JSON库之后,我终于得到了这两个:

  • 杰克逊
  • 谷歌GSon

我对GSON有点偏爱,但网上的消息是GSon遇到了某种天体性能问题(截至2009年9月).

我继续比较; 与此同时,我正在寻求帮助来决定我的想法.

java comparison json jackson gson

352
推荐指数
5
解决办法
16万
查看次数

我应该将Jackson的ObjectMapper声明为静态字段吗?

杰克逊图书馆的ObjectMapper课程似乎是线程安全的.

这是否意味着我应该将我声明ObjectMapper为像这样的静态字段

class Me {
    private static final ObjectMapper mapper = new ObjectMapper();
}
Run Code Online (Sandbox Code Playgroud)

而不是像这样的实例级字段?

class Me {
    private final ObjectMapper mapper = new ObjectMapper();
}
Run Code Online (Sandbox Code Playgroud)

java json jackson

334
推荐指数
3
解决办法
12万
查看次数

仅在序列化期间使用@JsonIgnore,但不反序列化

我有一个发送到服务器和从服务器发送的用户对象.当我发出用户对象时,我不想将散列密码发送给客户端.所以我添加@JsonIgnore了密码属性,但这也阻止了它被反序列化为密码,这使得在没有密码时很难注册用户.

我怎样才能@JsonIgnore应用于序列化而不是反序列化?我正在使用Spring JSONView,所以我没有很多控制权ObjectMapper.

我试过的事情:

  1. 加入@JsonIgnore物业
  2. @JsonIgnore仅添加getter方法

java spring json annotations jackson

298
推荐指数
5
解决办法
26万
查看次数

标签 统计

jackson ×10

java ×9

json ×9

annotations ×2

gson ×2

spring ×2

comparison ×1

data-binding ×1

orm ×1

spring-mvc ×1