com.fasterxml.jackson.databind.ObjectMapper类的使用及代码示例

x33g5p2x  于2022-01-17 转载在 其他  
字(14.9k)|赞(0)|评价(0)|浏览(1244)

本文整理了Java中com.fasterxml.jackson.databind.ObjectMapper类的一些代码示例,展示了ObjectMapper类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。ObjectMapper类的具体详情如下:
包路径:com.fasterxml.jackson.databind.ObjectMapper
类名称:ObjectMapper

ObjectMapper介绍

[英]ObjectMapper provides functionality for reading and writing JSON, either to and from basic POJOs (Plain Old Java Objects), or to and from a general-purpose JSON Tree Model ( JsonNode), as well as related functionality for performing conversions. It is also highly customizable to work both with different styles of JSON content, and to support more advanced Object concepts such as polymorphism and Object identity. ObjectMapper also acts as a factory for more advanced ObjectReaderand ObjectWriter classes. Mapper (and ObjectReaders, ObjectWriters it constructs) will use instances of JsonParser and JsonGeneratorfor implementing actual reading/writing of JSON. Note that although most read and write methods are exposed through this class, some of the functionality is only exposed via ObjectReader and ObjectWriter: specifically, reading/writing of longer sequences of values is only available through ObjectReader#readValues(InputStream)and ObjectWriter#writeValues(OutputStream).

Simplest usage is of form:

final ObjectMapper mapper = new ObjectMapper(); // can use static singleton, inject: just make sure to reuse! 
MyValue value = new MyValue(); 
// ... and configure 
File newState = new File("my-stuff.json"); 
mapper.writeValue(newState, value); // writes JSON serialization of MyValue instance 
// or, read 
MyValue older = mapper.readValue(new File("my-older-stuff.json"), MyValue.class); 
// Or if you prefer JSON Tree representation: 
JsonNode root = mapper.readTree(newState); 
// and find values by, for example, using a  
com.fasterxml.jackson.core.JsonPointer expression: 
int age = root.at("/personal/age").getValueAsInt();

The main conversion API is defined in ObjectCodec, so that implementation details of this class need not be exposed to streaming parser and generator classes. Usage via ObjectCodec is, however, usually only for cases where dependency to ObjectMapper is either not possible (from Streaming API), or undesireable (when only relying on Streaming API).

Mapper instances are fully thread-safe provided that ALL configuration of the instance occurs before ANY read or write calls. If configuration of a mapper instance is modified after first usage, changes may or may not take effect, and configuration calls themselves may fail. If you need to use different configuration, you have two main possibilities:

  • Construct and use ObjectReader for reading, ObjectWriter for writing. Both types are fully immutable and you can freely create new instances with different configuration using either factory methods of ObjectMapper, or readers/writers themselves. Construction of new ObjectReaders and ObjectWriters is a very light-weight operation so it is usually appropriate to create these on per-call basis, as needed, for configuring things like optional indentation of JSON.
  • If the specific kind of configurability is not available via ObjectReader and ObjectWriter, you may need to use multiple ObjectMapper instead (for example: you cannot change mix-in annotations on-the-fly; or, set of custom (de)serializers). To help with this usage, you may want to use method #copy() which creates a clone of the mapper with specific configuration, and allows configuration of the copied instance before it gets used. Note that #copy operation is as expensive as constructing a new ObjectMapper instance: if possible, you should still pool and reuse mappers if you intend to use them for multiple operations.

Note on caching: root-level deserializers are always cached, and accessed using full (generics-aware) type information. This is different from caching of referenced types, which is more limited and is done only for a subset of all deserializer types. The main reason for difference is that at root-level there is no incoming reference (and hence no referencing property, no referral information or annotations to produce differing deserializers), and that the performance impact greatest at root level (since it'll essentially cache the full graph of deserializers involved).

Notes on security: use "default typing" feature (see #enableDefaultTyping()) is a potential security risk, if used with untrusted content (content generated by untrusted external parties). If so, you may want to construct a custom TypeResolverBuilder implementation to limit possible types to instantiate, (using #setDefaultTyping).
[中]ObjectMapper提供了读写JSON的功能,可以从基本POJO(普通旧Java对象)或通用JSON树模型(JsonNode)读写JSON,还提供了执行转换的相关功能。它还具有高度的可定制性,既可以使用不同样式的JSON内容,也可以支持更高级的对象概念,如多态性和对象标识。ObjectMapper还充当更高级的ObjectReader和ObjectWriter类的工厂。Mapper(以及它构造的ObjectReaders、ObjectWriter)将使用JsonParser和JSONGenerator的实例来实现JSON的实际读写。请注意,尽管大多数读写方法都是通过此类公开的,但一些功能仅通过ObjectReader和ObjectWriter公开:具体来说,较长的值序列的读写只能通过ObjectReadValues(InputStream)和ObjectWriter writeValues(OutputStream)进行。
最简单的用法是:

final ObjectMapper mapper = new ObjectMapper(); // can use static singleton, inject: just make sure to reuse! 
MyValue value = new MyValue(); 
// ... and configure 
File newState = new File("my-stuff.json"); 
mapper.writeValue(newState, value); // writes JSON serialization of MyValue instance 
// or, read 
MyValue older = mapper.readValue(new File("my-older-stuff.json"), MyValue.class); 
// Or if you prefer JSON Tree representation: 
JsonNode root = mapper.readTree(newState); 
// and find values by, for example, using a  
com.fasterxml.jackson.core.JsonPointer expression: 
int age = root.at("/personal/age").getValueAsInt();

主转换API在ObjectCodec中定义,因此该类的实现细节无需向流解析器和生成器类公开。然而,通过ObjectCodec使用通常仅适用于不可能依赖ObjectMapper(来自流式API)或不需要依赖ObjectMapper(仅依赖流式API)的情况。
映射器实例是完全线程安全的,只要实例的所有配置发生在任何读或写调用之前。如果映射器实例的配置在首次使用后被修改,更改可能会生效,也可能不会生效,配置调用本身可能会失败。如果需要使用不同的配置,则有两种主要的可能性:
*构建并使用ObjectReader进行阅读,ObjectWriter进行写作。这两种类型都是完全不可变的,您可以使用ObjectMapper的工厂方法或读写器本身自由创建具有不同配置的新实例。构建新的ObjectReaders和ObjectWriter是一个非常轻量级的操作,因此通常可以根据需要在每次调用的基础上创建它们,以配置JSON的可选缩进等内容。
*如果无法通过ObjectReader和ObjectWriter获得特定类型的可配置性,则可能需要改用多个ObjectMapper(例如:不能动态更改注释中的混合;或自定义(反)序列化器集)。为了有助于这种用法,您可能需要使用方法#copy(),该方法创建具有特定配置的映射器克隆,并允许在使用复制的实例之前对其进行配置。请注意#复制操作与构建新的ObjectMapper实例一样昂贵:如果可能的话,如果您打算将映射器用于多个操作,则仍应将其池化并重用。
关于缓存的注意事项:根级别的反序列化程序始终被缓存,并使用完整(泛型感知)类型信息进行访问。这与被引用类型的缓存不同,后者更为有限,并且仅对所有反序列化器类型的子集进行缓存。差异的主要原因是在根级别没有传入引用(因此没有引用属性、没有引用信息或注释来生成不同的反序列化程序),并且在根级别性能影响最大(因为它本质上缓存了所涉及的反序列化程序的完整图)。
安全注意事项:如果与不受信任的内容(由不受信任的外部方生成的内容)一起使用,则使用“默认类型”功能(请参阅#enableDefaultTyping())可能存在安全风险。如果是这样,您可能希望构造一个定制的TypeResolverBuilder实现,以限制可能实例化的类型(使用#setDefaultTyping)。

代码示例

代码示例来源:origin: Vedenin/useful-java-links

/**
 *  Example to readJson using TreeModel
 */
private static void readJson() throws IOException {
  ObjectMapper mapper = new ObjectMapper();
  JsonNode rootNode = mapper.readValue("{\"message\":\"Hi\",\"place\":{\"name\":\"World!\"}}", JsonNode.class);
  String message = rootNode.get("message").asText(); // get property message
  JsonNode childNode =  rootNode.get("place"); // get object Place
  String place = childNode.get("name").asText(); // get property name
  System.out.println(message + " " + place); // print "Hi World!"
}

代码示例来源:origin: prestodb/presto

@Test
  public void testDeserializationSerialization()
      throws IOException
  {
    ObjectMapper mapper = new ObjectMapper();

    for (String input : testInputs) {
      RangePartition partition = mapper.readValue(input, RangePartition.class);

      String serialized = mapper.writeValueAsString(partition);
      assertEquals(serialized, input);
    }
  }
}

代码示例来源:origin: linlinjava/litemall

public static String parseString(String body, String field) {
  ObjectMapper mapper = new ObjectMapper();
  JsonNode node = null;
  try {
    node = mapper.readTree(body);
    JsonNode leaf = node.get(field);
    if (leaf != null)
      return leaf.asText();
  } catch (IOException e) {
    e.printStackTrace();
  }
  return null;
}

代码示例来源:origin: spring-projects/spring-framework

public MappingJackson2MessageConverter() {
  this.objectMapper = new ObjectMapper();
  this.objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
  this.objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}

代码示例来源:origin: stackoverflow.com

ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree("{\"k1\":\"v1\"}");

代码示例来源:origin: apache/zookeeper

public JsonOutputter() {
  mapper = new ObjectMapper();
  mapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);
  mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
  mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
}

代码示例来源:origin: opensourceBIM/BIMserver

public ObjectNode toJson() {
  ObjectMapper objectMapper = new ObjectMapper();
  ObjectNode result = objectMapper.createObjectNode();
  ObjectNode renderEngine = objectMapper.createObjectNode();
  result.set("renderEngine", renderEngine);
  renderEngine.put("name", renderEngineName);
  renderEngine.set("version", renderEngineVersion.toJson());
  ObjectNode ifcModel = objectMapper.createObjectNode();
  ObjectNode user = objectMapper.createObjectNode();
  ObjectNode settings = objectMapper.createObjectNode();
  ObjectNode deserializer = objectMapper.createObjectNode();
  ObjectNode system = objectMapper.createObjectNode();
  ArrayNode jobsArray = objectMapper.createArrayNode();
    ObjectNode jobNode = objectMapper.createObjectNode();
  ObjectNode processing = objectMapper.createObjectNode();
  ArrayNode geometry = objectMapper.createArrayNode();
    ObjectNode geometryNode = objectMapper.createObjectNode();
  ArrayNode skippedNodes = objectMapper.createArrayNode();

代码示例来源:origin: Netflix/eureka

private void doInstanceInfoCompactEncodeDecode(AbstractEurekaJacksonCodec codec, boolean isJson) throws Exception {
  InstanceInfo instanceInfo = infoIterator.next();
  String encodedString = codec.getObjectMapper(InstanceInfo.class).writeValueAsString(instanceInfo);
  if (isJson) {
    JsonNode metadataNode = new ObjectMapper().readTree(encodedString).get("instance").get("metadata");
    assertThat(metadataNode, is(nullValue()));
  }
  InstanceInfo decodedValue = codec.getObjectMapper(InstanceInfo.class).readValue(encodedString, InstanceInfo.class);
  assertThat(decodedValue.getId(), is(equalTo(instanceInfo.getId())));
  assertThat(decodedValue.getMetadata().isEmpty(), is(true));
}

代码示例来源:origin: opensourceBIM/BIMserver

ObjectMapper objectMapper = new ObjectMapper();
ObjectNode servicesJson = objectMapper.readValue(data, ObjectNode.class);
ArrayNode activeServices = (ArrayNode) servicesJson.get("active");
List<SNewServiceDescriptor> list = Collections.synchronizedList(new ArrayList<>());
ThreadPoolExecutor executor = new ThreadPoolExecutor(activeServices.size(), activeServices.size(), 1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(activeServices.size()));
for (JsonNode activeService : activeServices) {
  String providerListUrl = activeService.get("listUrl").asText();
  executor.submit(new Runnable(){

代码示例来源:origin: stackoverflow.com

import com.fasterxml.jackson.databind.ObjectMapper;// in play 2.3
ObjectMapper mapper = new ObjectMapper();

代码示例来源:origin: spring-projects/spring-framework

@Override
@Nullable
public String[] decodeInputStream(InputStream content) throws IOException {
  return this.objectMapper.readValue(content, String[].class);
}

代码示例来源:origin: stackoverflow.com

ObjectMapper mapper = new ObjectMapper();
 mapper.getFactory().configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);
 ObjectNode node = mapper.getNodeFactory().objectNode();
 node.put("field1", "Maël Hörz");
 System.out.println(mapper.writeValueAsString(node));

代码示例来源:origin: linlinjava/litemall

public static <T> T parseObject(String body, String field, Class<T> clazz) {
  ObjectMapper mapper = new ObjectMapper();
  JsonNode node = null;
  try {
    node = mapper.readTree(body);
    node = node.get(field);
    return mapper.treeToValue(node, clazz);
  } catch (IOException e) {
    e.printStackTrace();
  }
  return null;
}

代码示例来源:origin: apache/pulsar

@Override
  public LoadManagerReport deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
      throws IOException, JsonProcessingException {
    ObjectMapper mapper = ObjectMapperFactory.getThreadLocal();
    ObjectNode root = ObjectMapperFactory.getThreadLocal().readTree(jsonParser);
    if ((root.has("loadReportType") && root.get("loadReportType").asText().equals(LoadReport.loadReportType))
        || (root.has("underLoaded"))) {
      return mapper.readValue(root.toString(), LoadReport.class);
    } else {
      return mapper.readValue(root.toString(), LocalBrokerData.class);
    }
  }
}

代码示例来源:origin: linlinjava/litemall

public static Integer parseInteger(String body, String field) {
  ObjectMapper mapper = new ObjectMapper();
  JsonNode node = null;
  try {
    node = mapper.readTree(body);
    JsonNode leaf = node.get(field);
    if (leaf != null)
      return leaf.asInt();
  } catch (IOException e) {
    e.printStackTrace();
  }
  return null;
}

代码示例来源:origin: prestodb/presto

@Test
public void testHeartbeatStatsSerialization()
    throws Exception
{
  ObjectMapper objectMapper = new ObjectMapperProvider().get();
  Stats stats = new Stats(new URI("http://example.com"));
  String serialized = objectMapper.writeValueAsString(stats);
  JsonNode deserialized = objectMapper.readTree(serialized);
  assertFalse(deserialized.has("lastFailureInfo"));
  stats.recordFailure(new SocketTimeoutException("timeout"));
  serialized = objectMapper.writeValueAsString(stats);
  deserialized = objectMapper.readTree(serialized);
  assertFalse(deserialized.get("lastFailureInfo").isNull());
  assertEquals(deserialized.get("lastFailureInfo").get("type").asText(), SocketTimeoutException.class.getName());
}

代码示例来源:origin: prestodb/presto

@Test
  public void testJsonSerialization()
      throws Exception
  {
    TestingTypeManager typeManager = new TestingTypeManager();

    ObjectMapper mapper = new ObjectMapperProvider().get()
        .registerModule(new SimpleModule().addDeserializer(Type.class, new TestingTypeDeserializer(typeManager)));

    AllOrNoneValueSet all = AllOrNoneValueSet.all(HYPER_LOG_LOG);
    assertEquals(all, mapper.readValue(mapper.writeValueAsString(all), AllOrNoneValueSet.class));

    AllOrNoneValueSet none = AllOrNoneValueSet.none(HYPER_LOG_LOG);
    assertEquals(none, mapper.readValue(mapper.writeValueAsString(none), AllOrNoneValueSet.class));
  }
}

代码示例来源:origin: Vedenin/useful-java-links

public  static void main(String[] args) throws IOException {
  ObjectMapper mapper = new ObjectMapper();
  JsonNode root = mapper.readTree(json);
  String author = root.at("/store/book/3/title").asText();
  System.out.println(author); // print ["Hello, Middle-earth! "]
  System.out.println();
  String jsonHiWorld = "{\"message\":\"Hi\",\"place\":{\"name\":\"World!\"}}\"";
  String message = mapper.readTree(jsonHiWorld).at("/message").asText();
  String place = mapper.readTree(jsonHiWorld).at("/place/name").asText();
  System.out.println(message + " " + place); // print "Hi World!"
}

代码示例来源:origin: prestodb/presto

@Test
public void testSerialization()
    throws Exception
{
  ObjectMapper objectMapper = new ObjectMapper();
  BingTile tile = fromCoordinates(1, 2, 3);
  String json = objectMapper.writeValueAsString(tile);
  assertEquals("{\"x\":1,\"y\":2,\"zoom\":3}", json);
  assertEquals(tile, objectMapper.readerFor(BingTile.class).readValue(json));
}

代码示例来源:origin: stackoverflow.com

SimpleModule module = new SimpleModule();
module.addSerializer(new ResultSetSerializer());

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(module);

[ . . . do the query . . . ]
ResultSet resultset = statement.executeQuery(query);

// Use the DataBind Api here
ObjectNode objectNode = objectMapper.createObjectNode();

// put the resultset in a containing structure
objectNode.putPOJO("results", resultset);

// generate all
objectMapper.writeValue(stringWriter, objectNode);

相关文章

微信公众号

最新文章

更多

ObjectMapper类方法