我的 Json 看起来像(并且它不可修改)
{
....
"Sale": [
"SaleLines": {
"SaleLine": [
{
"Item": {
"Prices": {
"ItemPrice": [
{
"amount": "100",
"useType": "Default"
},
{
"amount": "100",
"useType": "MSRP"
}
]
},
}
......
......
}
]
"calcDiscount": "0",
"calcSubtotal": "500",
}
]
}
Run Code Online (Sandbox Code Playgroud)
java POJO 代码看起来像
public static class SaleLines {
@JsonProperty("SaleLine")
private SaleLineObject[] saleLineObject;
public SaleLineObject[] getSaleLineObject() { return saleLineObject; }
public void setSaleLineObject(SaleLineObject[] saleLineObject) { this.saleLineObject = saleLineObject; }
}
public static class SaleLineObject {
private SaleLine …Run Code Online (Sandbox Code Playgroud) 我使用 Jackson ObjectMapper 将对象层次结构序列化为 json String。之后我想反序列化对象。我有如下异常。
重要的是APINewDealArrangementImpl类层次结构超出了我的更改范围——它是外部库的一部分。在这种情况下,我无法实现默认构造函数,也无法使用@JsonCreatorannotion。
如何避免“找不到合适的构造函数”异常?是否可以使用TypeResolverBuilderJackson API 中的一些自定义实现或其他功能来解决这个问题?感谢帮助。
org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class com.tzero.api.transactions.TransactionState]: can not instantiate from JSON object (need to add/enable type information?)
at [Source: java.io.StringReader@57ac3379; line: 4, column: 5] (through reference chain: com.tzero.api.java.transactions.APINewDealArrangementImpl["state"])
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObjectUsingNonDefault(BeanDeserializer.java:746)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:683)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:414)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2732)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1863)
Run Code Online (Sandbox Code Playgroud) 假设我有一个枚举类,如下所示:
public enum Lang {
ENGLISH("en_US"), FRENCH("fr_CA");
String val;
Lang(String val) {
this.val = val;
}
public String getValue() {
return val;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个 POJO 如下:
public class Foo {
private String bar;
private Lang lang;
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
public Lang getLang() {
return lang;
}
public void setLang(Lang lang) {
this.lang = lang;
}
}
Run Code Online (Sandbox Code Playgroud)
如何配置 Jackson 以将以下有效负载转换为 POJO 类?
{ "bar": "someValue", "lang": "en-US"} …
class Request {
private String requestid;
private String contenttype;
private String service;
private String requestjson;
}
Run Code Online (Sandbox Code Playgroud)
使用对象映射器将此对象制作为 json 但映射器正在返回我
"requestjson\":\"{\\\"username\\\":\\\"farhan\\\",\\\"password\\\":\\\"farhaan\\\"}\"}"}
Run Code Online (Sandbox Code Playgroud)
我怎样才能删除这个额外的
\\\
Run Code Online (Sandbox Code Playgroud)
我试过
jsonOutput.replaceAll("\"",Character.toString ((char) 34));
Run Code Online (Sandbox Code Playgroud) 我需要一个JSON - > Pojo - > JSON转换.
我调查了主流图书馆Jackson和GSON,
显然两者都使用:
//write converted json data to a file named "file.json"
FileWriter writer = new FileWriter("c:\\file.json");
or In\Output Streams..
Run Code Online (Sandbox Code Playgroud)
当我编写新代码时,有两件事吓到我了:
我尽可能地避免这两种情况.
有没有其他方法可以做到这一点?
我正在编写一个 Spring RESTful 服务,它使用 JSON 并执行一些操作。由于请求包含大量参数,我想到了使用 Spring 的 Jackson 映射将我的请求参数映射到 Java 对象。
我的POJO
public class RequestInput {
private int id;
private String name;
// parameters follow
// getter and setter
}
Run Code Online (Sandbox Code Playgroud)
我的控制器
@Controller
public class RequestController{
@RequestMapping(method=RequestMethod.POST, value="/rest/postRequest")
public void handleRequest(@RequestBody RequestInput input){
// code follows
}
}
Run Code Online (Sandbox Code Playgroud)
数据发布时一切正常
{“id”:1,“名称”:“ABCD”}
但是当数据发布为
{“id”:1,“first_name”:“ABCD”}
对象中名称的值作为 返回NULL。
你能帮我理解如何将请求中的 first_name 映射到 Java POJO 中的 name param
为什么 Jackson 的 TypeReference 是抽象的?它通常会使用法变得更丑陋,因为您需要包含大括号来创建内联类(并且大多数 linter 强制您在同一行上没有大括号)。
new TypeReference<Map<String, String>>() {
};
Run Code Online (Sandbox Code Playgroud)
这是由于一些晦涩的 Java 语言限制吗?
我想知道 JACKSON 和 JSON 之间的区别?我在 android 中使用 JSON 数据格式。告诉我 JACKSON 和 JSON 的优缺点?