How to Map Json Field Names to Different Object Field Names

How to map JSON field names to different object field names?

Probably it's a bit late but anyway..

you can rename a property just adding

@JsonProperty("contractor")

And by default Jackson use the getter and setter to serialize and deserialize.

For more detailed information: http://wiki.fasterxml.com/JacksonFAQ

How to map JSON field names to Java object field names

You can use JsonProperty annotation as below so your clients can send request field name as FIRST_NAME and it can mapped to Employee class :

@Data // comes from lombok
class Employee {
@JsonProperty("FIRST_NAME")
private String firstName;

//other fields
}

How to map json response to the model with different field names

Use the JsonPropertyName attribute

public class Model
{
[JsonPropertyName("items")]
public SomeEntity[] Items { get; set; }
}

public class SomeEntity
{
[JsonPropertyName("A")]
public int MyA { get; set; } // map to A
[JsonPropertyName("User")]
public User MyUser { get; set; } // map to User
}

public class User
{
public string Name { get; set; }
[JsonPropertyName("Age")]
public string MyAge { get; set; } // map to Age
}

You can then deserialize it with something like

JsonSerializer.Deserialize<Model>(response);

Mapping JSON names to Java class fields/methods (Jackson Parser)

Use @JsonProperty :

@JsonProperty("goodName")
public String goodName;

@JsonProperty("not-so-handy")
public String notSoHandy;

This will solve the issue.

Java: How to map json keys which include dots?

Just use the annotation @JsonProperty on top of the field declaration, with a name that is different than the field's name:

@JsonProperty("key.1")
private final int key1;
@JsonProperty("key.2")
private final int key2;
@JsonProperty("key.3")
private final int key3;

As a general note, Jackson will map the Json key to the field name only if you don't specify anything else (so it will go by reflection).
However, with Jackson is possible to modify the names of the fields (and not only) using their annotations.

As a side note, you'll also need to annotate the constructor parameters to deserialize the object from Json to Java object:

@JsonCreator
public MyClass(
@JsonProperty(value = "key.1", required = true) int key1,
@JsonProperty(value = "key.2", required = true) int key2,
@JsonProperty(value = "key.3", required = true) int key3) {
this.key1 = key1;
this.key2 = key2;
this.key3 = key3;
}

... then you will be able to do what you wanted:

MyClass obj = mapper.readValue(json, MyClass.class);

Map dynamic field names while deserializing a JSON to a Java object

I think you can't do any better than using @JsonCreator:

class User {

private String userId;
private String name;
private String email;
private String phone;

@JsonCreator
public User(Map<String, Object> map) {
this.userId = (String) map.get("userId");
map.entrySet().stream()
.filter(e -> e.getKey().endsWith("_Name"))
.findFirst()
.ifPresent(e -> this.name = (String) e.getValue());
// repeat for other fields
}

// getters & setters (if needed)
}

You can change the stream by a traditional for each on the map's entry set to optimize performance-wise.

How to map JSON fields to custom object properties?

To map a JSON property to a java object with a different name use @JsonProperty annotation, and your code will be :

public class JsonEntity {
@JsonProperty(value="message")
private String value;
}

How to map JSON to Java POJO with a dynamic field in JSON?

May be you were thinking too complicated here.
In your CurrencyConvertDto class, instead of using

@JsonProperty("rates")
private Rates rates;

you can simply use

@JsonProperty("rates")
private Map<String, RateInfo> rates;

(and of course adjust the getRatesand setRates methods accordingly).
And then you don't need the Rates class anymore.

Jackson can cope with this out-of-the-box.
It will handle arbitrary currency codes as keys of the map, like in:

{
"base_currency_code": "HKD",
"base_currency_name": "Hong Kong dollar",
"amount": "150.5800",
"updated_date": "2022-03-20",
"rates": {
"GBP": {
"currency_name": "Pound sterling",
"rate": "0.0975",
"rate_for_amount": "14.6774"
},
"EUR": {
"currency_name": "Euro",
"rate": "0.120",
"rate_for_amount": "18.07"
}
},
"status": "success"
}

And by the way: You don't need to repeat the @JsonProperty
annotations on the getter and setter methods. Putting @JsonProperty
only on the member variables is already enough.

While deserializing a JSON to a C# object, how can I map dynamic field names?

You could use a Dictionary to store the key values where the Key names could change. For example,

public class Value
{
public string ledger { get; set; }
public string faid { get; set; }
}

public class ResponseObject
{
public string Count { get; set; }
public Dictionary<string,Value> Data { get; set; } // Change here
public string NextUri { get; set; }
}

Sample Output

enter image description here



Related Topics



Leave a reply



Submit