繁体   English   中英

如何使用android java中的fasterxml jackson动态解析本地Json动态修复pojo类

[英]how to parse local Json Dynamically for fixed pojo class using fasterxml jackson in android java

这是一个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;

但它返回我为空。 我错过了哪里。 那些可以像

  @JsonProperty("DetailedItems")
private DetailedItems DetailedItems;

@JsonProperty("SimilarArtists")
private SimilarArtists SimilarArtists;

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

但是我不想制作硬代码pojos,但是根据未来的变化灵活。

//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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM