我的模型:
abstract class Post implements Built<Post, PostBuilder> {
static Serializer<Post> get serializer => _$postSerializer;
int get userId;
int get id;
String get title;
String get body;
factory Post([updates(PostBuilder b)]) = _$Post;
Post._();
}
Run Code Online (Sandbox Code Playgroud)
我的要求:
Future<Post> getPostById(int id) async {
final resp = await http.get('https://jsonplaceholder.typicode.com/posts/${id}');
if(resp.statusCode == 200) {
return serializers.deserializeWith(Post.serializer, json.decode(resp.body));
}else {
throw Exception('Failed to load post');
}
}
Run Code Online (Sandbox Code Playgroud)
以及源代码中的断点:
if (serializer is StructuredSerializer) {
try {
// ===> HERE
return serializer.deserialize(this, object as Iterable,
specifiedType: specifiedType);
} on …Run Code Online (Sandbox Code Playgroud) 更新:删除了多余的代码
我需要反序列化一个 JSON 对象,该对象可以是父类的许多子类型之一。具体是哪种子类型由对象中的特定枚举字段决定。我已经向父类添加了@JsonTypeInfo注释@JsonSubTypes,据我所知它们都是正确的。
但是,枚举值与 Java 类中的枚举名称并不完全相同。因此,在枚举类中,我注释了一个静态方法,@JsonCreator以便 Jackson 知道如何将值反序列化为正确的 Java 枚举。
我遇到的问题是,一旦我反序列化 JSON 字符串,保存枚举的字段不包含实际的枚举值 - 它保留为null.
为什么该day字段保留为null反序列化期间的预期值以及如何将其设置为预期值?
代码如下。
家长日历类
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "day")
// For the sake of correct deserialisation, we need to map from values of type to child model classes explicitly
@JsonSubTypes({ @JsonSubTypes.Type(value = Monday.class, name = "monday"),
@JsonSubTypes.Type(value = Monday.class, name = "mon"),
@JsonSubTypes.Type(value = Tuesday.class, name = "tuesday"),
@JsonSubTypes.Type(value …Run Code Online (Sandbox Code Playgroud) 在我的程序中,我尝试更新用户的电子邮件。但这给了我一个例外说
嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造实例
java.util.HashSet
但是,当我通过添加技能和电子邮件更新用户时,它并没有给我这个例外。
我尝试创建一个默认构造函数,但它不起作用。我也尝试使用 Json Creator。它对我也不起作用。我可以看到问题是当我将技能集清空时,此异常正在上升。但我没有一个明确的想法,如何克服这个情况。
这是我的员工实体
@Entity
@Table(name = "Employee")
public class Employee implements Serializable{
private static final long serialVersionUID = -3009157732242241606L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long emp_id;
@Column(name = "emp_fname")
private String emp_fname;
@Column(name = "emp_lname")
private String emp_lname;
@Column(name = "emp_email")
private String emp_email;
@Column(name = "emp_dob")
private Date emp_dob;
@ManyToMany(cascade = CascadeType.MERGE)
@JoinTable(name = "emp_skills",
joinColumns = @JoinColumn(name = "emp_id", referencedColumnName = "emp_id"),
inverseJoinColumns = @JoinColumn(name = "s_id",referencedColumnName = "s_id"))
private Set<Skills> skills; …Run Code Online (Sandbox Code Playgroud) 我的 lib 正在调用一个 API,它可以返回以下 JSON 结构之一 -
{
"key_is_same" : {
"inner" : "val"
}
}
Run Code Online (Sandbox Code Playgroud)
-或者-
{
"key_is_same" : [{
"inner" : "val1"
},
{
"inner" : "val2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
jakson 中是否有任何注释可以处理此问题并将其反序列化为相应的类型
我的 Kafka Producer 正在发送 Json 格式的对象列表。
我试图弄清楚如何让我的消费者反序列化列表。我能够接收单个对象并读取它,但是当我将代码更改为类型 List 时,我收到以下错误:
Error:(32, 47) java: incompatible types: cannot infer type arguments for org.springframework.kafka.core.DefaultKafkaConsumerFactory<>
reason: inference variable V has incompatible equality constraints java.util.List<nl.domain.X>,nl.domain.X
Run Code Online (Sandbox Code Playgroud)
编辑
通过将 TypeReference 添加到 JsonDeserilizer 已解决此错误。
当前问题:
消费消息时,它不是我定义的类型(即 List< X > ),而是返回LinkedHashMap
这是消费者配置:
@EnableKafka
@Configuration
public class KafkaConfiguration {
@Bean
public ConsumerFactory<String, List<X>> xConsumerFactory() {
Map<String, Object> config = new HashMap<>();
config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092");
config.put(ConsumerConfig.GROUP_ID_CONFIG, "group_json");
config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);
return new DefaultKafkaConsumerFactory<>(config, new StringDeserializer(),
new JsonDeserializer<>(new TypeReference<List<X>>() …Run Code Online (Sandbox Code Playgroud) 对于两个不同的 ReST API,我得到了存在公共字段的不同响应。
我正在创建两个不同的 bean 进行反序列化。两种 Bean 都有共同的字段。反序列化工作正常,但声纳提出了公共字段存在重复代码块的问题。
为什么我无法通过展开根节点来反序列化对象数组?
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonRootName;
import org.junit.Assert;
import org.junit.Test;
public class RootNodeTest extends Assert {
@JsonRootName("customers")
public static class Customer {
public String email;
}
@Test
public void testUnwrapping() throws IOException {
String json = "{\"customers\":[{\"email\":\"hello@world.com\"},{\"email\":\"john.doe@example.com\"}]}";
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
List<Customer> customers = Arrays.asList(mapper.readValue(json, Customer[].class));
System.out.println(customers);
}
}
Run Code Online (Sandbox Code Playgroud)
我一直在挖掘杰克逊的文档,这是我能想到的,但在运行它时,我收到以下错误:
A org.codehaus.jackson.map.JsonMappingException has been caught, Root name 'customers' does not match expected ('Customer[]') for type [array type, component type: [simple …Run Code Online (Sandbox Code Playgroud) 我无法反序列化以下响应:我的JSON是
json is
{
"disclaimer": "Exchange rates/",
"license": "Data sourced from various providers",
"timestamp": 1435813262,
"base": "USD",
"rates": {
"AED": 3.672973,
"AFN": 60.150001,
"ALL": 126.7792,
"AMD": 472.46,
"ANG": 1.78875,
"AOA": 121.253666,
"ARS": 9.095239,
"AUD": 1.307011,
"AWG": 1.793333,
"AZN": 1.04955,
}
}
Run Code Online (Sandbox Code Playgroud)
控制器是:
[HttpPost]
public ActionResult Index(Test1 values)
{
string appid = values.apikey;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://openexchangerates.org//api/latest.json?app_id=5db2fa81c8174a839756eb4d5a4a5e05");
request.Method = "POST";
using (StreamWriter streamWriter = new StreamWriter(request.GetRequestStream(), ASCIIEncoding.ASCII))
{
streamWriter.Write(appid1);
streamWriter.Close();
}
string responseText = String.Empty;
if (request.Headers.Count > 0)
{
using …Run Code Online (Sandbox Code Playgroud) 如何解析具有Assets对象的json是未知的?
如
{
"ClassName": "Excel",
"Teacher": "Esther",
"Student": 50,
"Aircond": 0,
"Assets": {
"Chair": 50,
"Table": 50,
"Fan": 2,
and might be more here and is unknown to me
}
}
Run Code Online (Sandbox Code Playgroud) 如何反序列化以下内容.问题是变量名是一个数字.那么应该如何定义MyClass呢?
json_str:
{"23521952": {"b": [], "o": []}, "23521953": {"b": [], "o": []}}
class MyClass { //? };
var var = JsonConvert.DeserializeObject<MyClass>(json_str);
Run Code Online (Sandbox Code Playgroud) java ×5
json ×5
c# ×3
jackson ×3
spring ×2
spring-boot ×2
apache-kafka ×1
dart ×1
enums ×1
flutter ×1
json.net ×1
jsonparser ×1
sonarqube ×1
spring-kafka ×1