`
dh189
  • 浏览: 135989 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

java jackson examples

    博客分类:
  • java
阅读更多
user.json文件数据如下:
{
  "name" : { "first" : "Joe", "last" : "Sixpack" },
  "gender" : "MALE",
  "verified" : false,
  "userImage" : "Rm9vYmFyIQ=="
}

User.java
public class User {
    public enum Gender { MALE, FEMALE };

    public static class Name {
      private String _first, _last;

      public String getFirst() { return _first; }
      public String getLast() { return _last; }

      public void setFirst(String s) { _first = s; }
      public void setLast(String s) { _last = s; }
    }

    private Gender _gender;
    private Name _name;
    private boolean _isVerified;
    private byte[] _userImage;

    public Name getName() { return _name; }
    public boolean isVerified() { return _isVerified; }
    public Gender getGender() { return _gender; }
    public byte[] getUserImage() { return _userImage; }

    public void setName(Name n) { _name = n; }
    public void setVerified(boolean b) { _isVerified = b; }
    public void setGender(Gender g) { _gender = g; }
    public void setUserImage(byte[] b) { _userImage = b; }
}


将json转换为User对象
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
User user = mapper.readValue(new File("user.json"), User.class);

将json转换为Map对象
Map<String,Object> userData = mapper.readValue(new File("user.json"), Map.class);

通过向Map中添加数据来生成json
Map<String,Object> userData = new HashMap<String,Object>();
Map<String,String> nameStruct = new HashMap<String,String>();
nameStruct.put("first", "Joe");
nameStruct.put("last", "Sixpack");
userData.put("name", nameStruct);
userData.put("gender", "MALE");
userData.put("verified", Boolean.FALSE);
userData.put("userImage", "Rm9vYmFyIQ==");

mapper.writeValue(new File("user-modified.json"), userData);

类型对照:

Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });

ObjectMapper m = new ObjectMapper();
// can either use mapper.readTree(JsonParser), or bind to JsonNode
JsonNode rootNode = m.readValue(new File("user.json"), JsonNode.class);
// ensure that "last name" isn't "Xmler"; if is, change to "Jsoner"
JsonNode nameNode = rootNode.path("name");
String lastName = nameNode.path("last").getTextValue().
if ("xmler".equalsIgnoreCase(lastName)) {
  ((ObjectNode)nameNode).put("last", "Jsoner");
}
// and write it out:
m.writeValue(new File("user-modified.json"), rootNode);

TreeMapper treeMapper = new TreeMapper();
ObjectNode userOb = treeMapper.objectNode();
Object nameOb = userRoot.putObject("name");
nameOb.put("first", "Joe");
nameOb.put("last", "Sixpack");
userOb.put("gender", User.Gender.MALE.toString());
userOb.put("verified", false);
byte[] imageData = getImageData(); // or wherever it comes from
userOb.put("userImage", imageData);

JsonFactory f = new JsonFactory();
JsonGenerator g = f.createJsonGenerator(new File("user.json"));
g.writeStartObject();
g.writeObjectFieldStart("name");
g.writeStringField("first", "Joe");
g.writeStringField("last", "Sixpack");
g.writeEndObject(); // for field 'name'
g.writeStringField("gender", Gender.MALE);
g.writeBooleanField("verified", false);
g.writeFieldName("userImage"); // no 'writeBinaryField' (yet?)
byte[] binaryData = ...;
g.writeBinary(binaryData);
g.writeEndObject();
g.close(); // important: will force flushing of output, close underlying output stream

JsonFactory f = new JsonFactory();
JsonParser jp = f.createJsonParser(new File("user.json"));
User user = new User();
jp.nextToken(); // will return JsonToken.START_OBJECT (verify?)
while (jp.nextToken() != JsonToken.END_OBJECT) {
  String fieldname = jp.getCurrentName();
  jp.nextToken(); // move to value, or START_OBJECT/START_ARRAY
  if ("name".equals(fieldname)) { // contains an object
    Name name = new Name();
    while (jp.nextToken() != JsonToken.END_OBJECT) {
      String namefield = jp.getCurrentName();
      jp.nextToken(); // move to value
      if ("first".equals(namefield)) {
        name.setFirst(jp.getText());
      } else if ("last".equals(namefield)) {
        name.setLast(jp.getText());
      } else {
        throw new IllegalStateException("Unrecognized field '"+fieldname+"'!");
      }
    }
    user.setName(name);
  } else if ("gender".equals(fieldname)) {
    user.setGender(Gender.valueOf(jp.getText()));
  } else if ("verified".equals(fieldname)) {
    user.setVerified(jp.getCurrentToken() == JsonToken.VALUE_TRUE);
  } else if ("userImage".equals(fieldname)) {
    user.setUserImage(jp.getBinaryValue());
  } else {
    throw new IllegalStateException("Unrecognized field '"+fieldname+"'!");
  }
}
jp.close(); // ensure resources get cleaned up timely and properly
  • 大小: 42.8 KB
分享到:
评论
1 楼 zuyali 2011-12-23  
很实用。。。。

相关推荐

    adv-java-examples.zip_adv-java-examples_大项目

    这个压缩包"adv-java-examples.zip"提供了丰富的学习材料,无需解压密码,使得学习者能够无障碍地探索和学习。 在"www.pudn.com.txt"文件中,可能包含了关于这些示例的来源或作者信息,或者是对整个压缩包的简要...

    jackson-serialization-examples:常用的Java JSON序列化示例

    Java和JSON-使用ObjectMapper的Jackson示例 该存储库包含博客文章中使用的代码示例。 单击链接以获取有关示例的所有信息。 内容 该代码包含以下示例,所有这些示例均在同一JUnit测试中,您可以实际看到期望的输出...

    mssc-jackson-examples

    标题 "mssc-jackson-examples" 提供的信息表明,这是一个关于使用Jackson库与Spring Framework集成的示例项目。Jackson是一个广泛使用的Java库,用于处理JSON数据的序列化和反序列化,而Spring Framework则是一个...

    Java XML and JSON: Document Processing for Java SE, 2nd Edition

    New in this edition is coverage of Jackson (a JSON processor for Java) and Oracle’s own Java API for JSON processing (JSON-P), which is a JSON processing API for Java EE that also can be used with ...

    java常用jar包

    在Java中,有许多JSON库,如Jackson、Gson、org.json等,它们提供了将Java对象转换为JSON字符串以及反序列化JSON到Java对象的功能。 6. **jstl**: JSTL(JavaServer Pages Standard Tag Library)是一组标准标签...

    JavaEE examples (including JAX-RS, Wildfly Swarm,

    2. **实体类**:如果涉及数据交换,可能包含用于序列化和反序列化的Java类,这些类通常会用到JAXB或Jackson库进行JSON或XML的转换。 3. **依赖注入**:可能使用了CDI(Contexts and Dependency Injection)来管理...

    java-crudl:一个使用Jersey,Jackson和Jetty的Java Web服务示例,实现了CRUDL功能

    This is a simple implementation in Java for the server side of [examples/crudl.sadl](https://github.com/boynton/sadl/blob/master/examples/crudl.sadl). To build and run the server: $ make 然后您可以对...

    javaweb项目常用jar包

    poi-examples-3.12.jar poi-excelant-3.12.jar poi-ooxml-3.12.jar poi-ooxml-schemas-3.12.jar poi-scratchpad-3.12.jar ridl-3.0.0.jar simple-spring-memcached-3.5.0.jar slf4j-api-1.6.0.jar slf4j-log...

    api-examples:各种编程语言对Clockify REST API的调用示例

    对于Clockify API,可能还会涉及到JSON库,如Jackson或Gson,用来序列化和反序列化API的响应数据。 在“api-examples-main”这个文件夹中,我们可以预期找到主代码仓库的入口,包括但不限于以下内容: 1. 一个或多...

    Blog-Examples:包含在http上注释的代码示例

    示例可能包括使用`org.json`库或Gson、Jackson等库解析和生成JSON数据。 5. **异步HTTP请求**:Java 8引入了CompletableFuture,可以用来处理异步HTTP请求。示例可能展示了如何使用这个特性来处理非阻塞的网络请求...

    android-examples

    这个项目主要以Java语言编写,这符合Android平台的主要编程语言特性。在这里,我们将深入探讨"android-examples"中的关键知识点,以及如何利用这些例子来提升Android开发技能。 1. **Android基础知识**:项目中的每...

    android-examples:android示例

    这个项目主要以Java语言编写,这符合Android平台的主要编程语言特性。 1. **聊天示例**: 聊天应用是Android开发中的常见应用场景,涉及到实时通信、用户界面设计和数据同步等多个技术点。在"android-examples"中...

    spring-project-examples:spring项目示例

    Spring Boot Web起步依赖包括了Tomcat服务器、Spring Web、Spring MVC以及Jackson库(用于JSON序列化和反序列化)等,让开发者能够快速搭建起一个可运行的Web服务。 **学习资源与实践** 在"spring-project-...

    android-examples:具有基本功能(例如汇率计算器,抵押贷款计算器和秒表)的Android应用

    对于JSON解析,可以使用Gson库将JSON字符串转化为Java对象,或者使用Jackson或org.json库进行手动解析。 其次,抵押贷款计算器涉及到金融计算,如等额本息或等额本金还款法。开发者需要了解基本的金融公式,并将其...

    volley-examples

    在"volley-examples"中,你可以学习如何创建自定义的HttpStack来处理特定的网络协议,或者使用Gson、Jackson等库对JSON数据进行解析。 在错误处理方面,Volley提供了一种统一的错误处理方式,即在Response.Error...

    Java版QQ签到源码-log4perl:Perl的Log4j实现

    3. **JSON解析**:接收服务器返回的JSON数据,使用诸如Jackson或Gson的库解析这些数据,获取签到结果。 4. **错误处理**:处理可能出现的网络异常、解析错误等,并记录相关日志,便于后期排查问题。 5. **日志记录**...

    android-examples:这个 repo 包含许多不同的 android 示例和活动

    这个项目以Java语言为主,因此对于想要学习或巩固Java在Android应用开发中的应用的开发者来说,这是一个宝贵的资源。 1. **Android活动(Activity)**:在Android应用中,Activity是用户界面的主要组件,它负责与...

    vaadin-spring-boot-examples:在Spring Boot应用程序中使用Vaadin,REST和静态HTML的示例

    在提供的`vaadin-spring-boot-examples-master`压缩包中,我们可以看到以下关键文件: - `src/main/java`: 存放Java源代码,包括Vaadin UI组件、REST控制器等。 - `src/main/resources`: 包含了静态资源文件,如...

    Android-Examples:为了在 Android 上测试不同概念而创建的存储库

    作为一个专注于Java语言的项目,它提供了丰富的实例,涵盖了从基础到进阶的Android开发知识。 1. **Android基础知识**: - **Activity**:Android应用的核心组件,负责用户界面的交互。 - **Intent**:用于在组件...

Global site tag (gtag.js) - Google Analytics