gpt4 book ai didi

java - 如何在android java中使用fasterxml jackson动态解析本地Json以获取固定的pojo类

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:00 25 4
gpt4 key购买 nike

这是一个 json 文件。

{
"RackItems": [
{
"Name": "Profile",
"Description": "Profile Items",
"MainContentItems": [
{
"Name": "Personal",
"Description": "Profile",
"ContentItems": [
{
"Name": "Personal Details",
"Type": "Profile"
}
]
},
{
"Name": "My Playlists",
"Description": "Playlists",
"ContentItems": [
{
"Name": "My Playlists",
"Description": "My Playlists",
"Type": "Playlist"
}
]
}
]
},
{
"Name": "Home",
"Description": "Home Items",
"ContentItems": [
{
"Name": "Top Songs",
"Description": "Top Songs",
"Type": "Song"
},
{
"Name": "Top Albums",
"Description": "Top Albums",
"Type": "Album"
}
]
}
],
"DetailedItems": {
"Genre": {
"Name": "Genre",
"Description": "Genre Items",
"ContentItems": [
{
"Name": "Top @@ Songs",
"Description": "Top Songs"
},
{
"Name": "Top @@ Albums",
"Description": "Top Albums"
}
]
},
"UserProfile": {
"Name": "User Profile",
"Description": "User Profile",
"MainContentItems": [
{
"Name": "Personal",
"Description": "Profile",
"ContentItems": [
{
"Name": "Personal Details",
"Description": "Personal Details",
"ItemType": "ProfileView"
}
]
},
{
"Name": "Playlists",
"Description": "Playlists",
"ContentItems": [
{
"Name": "Playlists",
"Description": "Playlists",
"ItemType": "Playlist"
}
]
}
]
}
},
"DownloadSongs": {
"Name": "Download Songs",
"Description": "Download Songs",
"ItemType": "DownloadSongsResult"
}
}

这里是单独的 pojo 类:

@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentMusicPlayerChild {

String Name, Description;

public String getName() {
return Name;
}

public void setName(String name) {
Name = name;
}

public String getDescription() {
return Description;
}

public void setDescription(String description) {
Description = description;
}
}

以及其他具有相同类型的顶级 getter setter 的 pojo

 List<Object> cStringList = new ArrayList<>();

@JsonAnyGetter
public List<Object> getcStringList() {
return cStringList;
}

@JsonAnySetter
public void setcStringList(List<Object> cStringList) {
this.cStringList = cStringList;
}

这里我使用 JsonAnyGetter 和 JsonAnySetter 来获取包含的任何数据。喜欢

 ContentMusicPlayer contentMusicPlayer = null;
ObjectMapper objectMapper = new ObjectMapper();


contentMusicPlayer = objectMapper.readValue(UtilMethod.loadJSONFromAsset(context), ContentMusicPlayer.class);
Log.e("contentMusicPlayer", contentMusicPlayer+ "");

return contentMusicPlayer;

但它返回给我 null。我哪里失踪了。这些可以像这样完成

  @JsonProperty("DetailedItems")
private DetailedItems DetailedItems;

@JsonProperty("SimilarArtists")
private SimilarArtists SimilarArtists;

@JsonProperty("RackItems")
private List<RackItems> RackItems;

但我不想制作硬代码 pojo,而是希望将来可以灵活地进行更改。

最佳答案

//Main parser class

public class MainParser {

RackItemsData RackItems;

GenereData DetailedItems;

public DownloadSongsData getDownloadSongs() {
return DownloadSongs;
}

public void setDownloadSongs(DownloadSongsData downloadSongs) {
DownloadSongs = downloadSongs;
}

public GenereData getDetailedItems() {
return DetailedItems;
}

public void setDetailedItems(GenereData detailedItems) {
DetailedItems = detailedItems;
}

public RackItemsData getRackItems() {
return RackItems;
}

public void setRackItems(RackItemsData rackItems) {
RackItems = rackItems;
}

DownloadSongsData DownloadSongs;
}
// Second class
public class RackItemsData {

String Name;
String Description;
ArrayList<MainContentItemsData> MainContentItems;

public String getName() {
return Name;
}

public void setName(String name) {
Name = name;
}

public String getDescription() {
return Description;
}

public void setDescription(String description) {
Description = description;
}

public ArrayList<MainContentItemsData> getMainContentItems() {
return MainContentItems;
}

public void setMainContentItems(ArrayList<MainContentItemsData> mainContentItems) {
MainContentItems = mainContentItems;
}
}

//ThirdClass

public class MainContentItemsData {
String Name;
String Description;
ArrayList<ContentItemsData> ContentItems;
public ArrayList<ContentItemsData> getContentItems() {
return ContentItems;
}

public void setContentItems(ArrayList<ContentItemsData> contentItems) {
ContentItems = contentItems;
}



public String getDescription() {
return Description;
}

public void setDescription(String description) {
Description = description;
}

public String getName() {
return Name;
}

public void setName(String name) {
Name = name;
}
}

//Forth class

public class ContentItemsData {
String Name;
String Description;
String Type;

public String getName() {
return Name;
}

public void setName(String name) {
Name = name;
}

public String getDescription() {
return Description;
}

public void setDescription(String description) {
Description = description;
}

public String getType() {
return Type;
}

public void setType(String type) {
Type = type;
}
}


//Fifth Class
public class GenereData {
MainContentItemsData Genre;

public MainContentItemsData getGenre() {
return Genre;
}

public void setGenre(MainContentItemsData genre) {
Genre = genre;
}


public RackItemsData getUserProfile() {
return UserProfile;
}

public void setUserProfile(RackItemsData userProfile) {
UserProfile = userProfile;
}

RackItemsData UserProfile;
}


//Sixth class

public class DownloadSongsData {
String Name;
String Description;
String ItemType;

public String getName() {
return Name;
}

public void setName(String name) {
Name = name;
}

public String getDescription() {
return Description;
}

public void setDescription(String description) {
Description = description;
}

public String getItemType() {
return ItemType;
}

public void setItemType(String itemType) {
ItemType = itemType;
}
}

/////

use GSon libraru and parse data;

Gson gson = new Gson();
MainParser resultObject = gson.fromJson(jsonResultString, MainParser.class);

关于java - 如何在android java中使用fasterxml jackson动态解析本地Json以获取固定的pojo类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36029464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com