标签: json-deserialization

built_value 反序列化遇到错误“类型 '_InternalLinkedHashMap<String,dynamic>' 不是类型转换中类型 'Iterable<dynamic>' 的子类型”

我的模型:

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)

dart json-deserialization flutter

1
推荐指数
1
解决办法
2341
查看次数

Jackson 反序列化子类型将枚举字段设置为 null

更新:删除了多余的代码

我需要反序列化一个 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)

java enums jackson json-deserialization

1
推荐指数
1
解决办法
1550
查看次数

如何解决 MismatchedInputException: Cannot Construction instance of `java.util.HashSet` 异常

在我的程序中,我尝试更新用户的电子邮件。但这给了我一个例外说

嵌套异常是 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)

json json-deserialization spring-boot jsonparser

1
推荐指数
1
解决办法
5264
查看次数

使用 Jackson 反序列化一个属性,该属性可以是对象列表或对象

我的 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 中是否有任何注释可以处理此问题并将其反序列化为相应的类型

java jackson json-deserialization

1
推荐指数
1
解决办法
1959
查看次数

如何在我的 kafka 消费者中使用对象反序列化 json 列表?

我的 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)

java spring apache-kafka json-deserialization spring-kafka

1
推荐指数
1
解决办法
1万
查看次数

如何解决声纳问题 - 重复的代码块?

对于两个不同的 ReST API,我得到了存在公共字段的不同响应。

我正在创建两个不同的 bean 进行反序列化。两种 Bean 都有共同的字段。反序列化工作正常,但声纳提出了公共字段存在重复代码块的问题。

java spring json-deserialization spring-boot sonarqube

1
推荐指数
1
解决办法
2万
查看次数

为什么我不能打开根节点并反序列化一个对象数组?

为什么我无法通过展开根节点来反序列化对象数组?

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)

java json jackson deserialization json-deserialization

0
推荐指数
1
解决办法
3107
查看次数

反序列化json对c#的响应

我无法反序列化以下响应:我的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)

c# json json-deserialization

0
推荐指数
1
解决办法
626
查看次数

解析具有不确定数据的json

如何解析具有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)

c# json json.net deserialization json-deserialization

0
推荐指数
1
解决办法
69
查看次数

Howto C#DeserializeObject,变量名是多少?

如何反序列化以下内容.问题是变量名是一个数字.那么应该如何定义MyClass呢?

json_str:
{"23521952": {"b": [], "o": []}, "23521953": {"b": [], "o": []}}

class MyClass {     //? };

var var = JsonConvert.DeserializeObject<MyClass>(json_str);
Run Code Online (Sandbox Code Playgroud)

c# serialization json json-deserialization

0
推荐指数
1
解决办法
82
查看次数