Tag: json

使用超大的json文件。 总是内存不足

如何使用带有jackson的流API json? 请参阅下面的代码: ObjectMapper mapper = new ObjectMapper(); Map map = new HashMap(); List list = new ArrayList(); // Get images in database try { Class.forName(DRIVER); connection = DriverManager.getConnection(URL, USER, PASSWORD); Statement s = connection.createStatement(); ResultSet r = s.executeQuery(“select * from images”); while (r.next()) { byte[] imageBytes = r.getBytes(“image”); String imageBase64 = DatatypeConverter.printBase64Binary(imageBytes); list.add(imageBase64); } […]

如何在Spring 4中使用rapidxml Jackson JSON序列化

当我使用以下curl调用它时,为什么我的Spring控制器不返回媒体类型application/json : curl -v -i -H “Accept: application/json” localhost:8080/properties-ws/prop/2322 我已经阅读了关于这个主题的所有其他问题和答案,没有一个解决我的具体问题。 我正在使用Spring 4,并且有一个简单的Controller和pom。 控制器方法 @RequestMapping(value=”/prop/{character}”, method=RequestMethod.GET, produces={MediaType.APPLICATION_JSON_VALUE}) public @ResponseBody CharData getData(@PathVariable(value=”character”) int codePoint) { CharData chData = null; chData = CharPropertiesService.getProperties(codePoint); return chData; } POM文件依赖jackson 我包括了fastxml jackson-databind工件版本2.3.3 这是pom: 4.0.0 com.joconner.unicode 0.0.1-SNAPSHOT properties-ws properties-ws war 1.7 4.0.3.RELEASE 1.6.9 1.6.1 UTF-8 com.joconner.unicode properties 1.0.0-SNAPSHOT compile com.fasterxml.jackson.core jackson-databind 2.3.3 […]

Java 8 Jacksonvalidation

我有一个springbootrest服务。 用户传入一个json对象,该对象被反序列化到这个java pojo中: public final class Request { private String id; private double code; private String name; public String getId() { return id; } public double getCode() { return code; } public String getName() { return name; } } 所以用户需要传入以下json: { “id”: “123457896”, “code”: “Foo”, “name”: “test” } 我想让所有这些领域都需要。 提供更少或更多的东西会引发exception。 有没有办法告诉jackson在反序列化时validation输入? 我试过@JsonProperty(required=true)但这不起作用; 显然从这里和这里看来, JsonProperty注释似乎没有得到尊重。 我有我在控制器中调用的validation器: […]

使用JSON反序列化为Java对象?

我必须收到以下JSON: { “method”:”methodName1″, “args”:{ “arg1Name”:”arg1Value”, “arg2Name”:”arg2Value” } } 这是另一个例子: { “method”:”methodName2″, “args”:{ “arg1Name”:”arg1Value”, “arg2Name”:”arg2Value” “arg3Name”:”arg3Value” “arg4Name”:”arg4Value” } } 我需要解析那些JSON,以便使用指定的“args”作为参数调用指定的方法。 对我来说简单的方法是使用JsonParser获取JsonElement ,然后使用JsonObject ,然后使用.get()提取每个值…这样的事情: JsonParser jsonParser = new JsonParser(); JsonElement jsonElement = jsonParser.parse(jsonString); if (jsonElement.isJsonObject()) { JsonObject jsonObject = jsonElement.getAsJsonObject(); String method = jsonObject.get(“method”).getAsString(); JsonObject jsonArgs = jsonObject.getAsJsonObject(“args”); String arg1 = jsonArgs.get(“arg1Name”).getAsString(); String arg2 = jsonArgs.get(“arg2Name”).getAsString(); } […]

ZonedDateTime的jackson反序列化问题

我在我正在使用的服务的反序列化过程中使用的类中有以下字段。 private ZonedDateTime transactionDateTime; 我正在使用的服务可以使用以下模式返回Date或DateTime: yyyy-MM-dd’T’HH:mm:ss.SSSZ 让我举两个服务返回的例子: 2015-11-18T18:05:38.000 + 0200 2015-11-18T00:00:00.000 + 0200 虽然第一个工作正常,但后者导致在反序列化期间抛出以下exception: java.time.format.DateTimeParseException:无法在索引23处解析文本’2015-11-18T00:00:00.000 + 0200′ 我正在使用; Spring Boot 1.3.1 Jackson 2.6.4(包含JSR310模块) 这需要自定义反序列化类吗?

基于对象类型反序列化JSON

我正在创建一个以JSON消息的forms接收请求的服务。 我需要解析消息并根据请求类型采取适当的操作。 例如(伪代码): switch(request.type) { case “NewOrder”: createNewOrder(order); break; case “CancelOrder” cancelOrder(orderId); break; } 似乎大多数JSON API(至少那些为您执行对象映射的API)需要根对象类型来反序列化。 这周围有什么优雅的方式吗? 例如,在Jackson API(使用完整对象映射)中,我需要调用mapper,如下所示: NewOrder newOrder = mapper.readValue(src, NewOrder.class); CancelOrder cancelOrder = mapper.readValue(src. CancelOrder.class); 这意味着我需要在解析它之前知道对象的类。 我真正需要的是一些方法来查看JSON字符串,确定请求类型,然后调用适当的readValue()方法 – 如下所示: String requestType = getRequestType(src); switch(request.type) { case “NewOrder”: NewOrder newOrder = mapper.readValue(src, NewOrder.class); createNewOrder(newOrder.order); break; case “CancelOrder” CancelOrder cancelOrder = mapper.readValue(src. CancelOrder.class); […]

jackson:从json中删除一些值并保留一些空值

我有这样的模型: public class Employee { @JsonProperty(“emplyee_id”) private Integer id; @JsonProperty(“emplyee_first_name”) private String firstName; @JsonProperty(“emplyee_last_name”) private String lastName; @JsonProperty(“emplyee_address”) private String address; @JsonProperty(“emplyee_age”) private Byte age; @JsonProperty(“emplyee_level”) private Byte level; //getters and setters } 现在我需要使用此(仅)模型创建两个JSON。 第一个必须这样,例如: { “employee_id”:101, “employee_first_name”:”Alex”, “employee_last_name”:”Light”, “employee_age”:null, “employee_address”:null } 第二个必须像这样: { “employee_id”:101, “employee_level”:5 } 顺便说一句,我已经测试了@JsonIgnore和@JsonInclude(JsonInclude.Include.NON_NULL) 。 第一个(我知道的)问题是,那些字段不能包含在其他JSON中(例如,如果level获取此注释,它将不包含在第二个JSON中) 而第二个的问题是, null值不能包含在JSON中。 那么我可以保留空值并阻止一些其他属性包含在JSON中而无需创建额外的模型吗? 如果答案是肯定的,我该怎么办呢? 如果不是我真的很感激,如果有人给我这个状态的最佳解决方案。 […]

从Java中的JSON数组对象获取字符串值

编辑:我实际上找到了答案。 因为我是新人,所以我无法解决这个问题。 我能够使用Array.getString(i)返回所需的字符串值。 谢谢你的帮助。 我有这样的JSON: { “List”: [ “example1”, “example2”, “example3”, “example4” ] } 我试图在不使用密钥的情况下获取这些对象的字符串值。 我怎样才能做到这一点? jsonObject的getString()需要一个键,而我没有。

从JSONArray中删除JSON对象 – Jettison

是否有通过使用索引删除存储在JSONArray中的JSONObject的直接方法。 我尝试了所有的可能性。 仍然无法从JSON数组中删除JSON对象。 任何提示都会有所帮助谢谢

使用Jackson进行不对称序列化和反序列化

我正在使用Jackson为RESTful API序列化和反序列化数据。 我想要一个REST资源( /comments ),它允许POST注释以及获取注释列表。 这是发布到/comments的内容的(简化)示例。 {“text”:”Text”,”author”:”Paul”,”email”:”paul@example.org”} 以下是GET /comments的结果: [{“text”:”Text”,”author”:”Paul”,”emailHash”:”76w0kjKP9HpsdhBjx895Sg==”}] 由于任何人都不应该看到电子邮件地址,因此我决定只返回响应中电子邮件地址的MD5哈希值。 我创建了一个简单的POJO类Comment ,其中包含用于text , author , email和email emailHash getter和setter的字段。 现在,当我序列化结果时,我得到的是以下内容: [{“text”:”Text”,”author”:”Paul”,”email”:null,”emailHash”:”76w0kjKP9HpsdhBjx895Sg==”}] 但我真的不喜欢email在这里返回null 。 它根本不应该被包括在内。 在该字段上使用注释@JsonIgnore也将在反序列化时忽略它。 我是否必须创建两个类,例如CreationComment和ResultComment以及一个共享公共字段的超类Comment ,或者是否有一种方法可以避免创建其他类?