0

次の形式の Json があります。

"items": [
{
  "id": 1,
  "text": "As a user without a subscription, I get a choice of available ones.",
  "status": "finished",
  "tags": [
    {
      "id": 1234,
      "name": "feature=subs"
    },
    {
      "id": 1235,
      "name": "epic=premium"
    }
  ]
},
{
  "id": 2,
    ...

他にもフィールドがありますが、わかりやすくするために省略しています。フィールドID、テキスト、ステータス、およびタグのリストを使用して、各ストーリーをストーリークラスにマップしようとしています。以下を使用して正常に動作しています。

public Project JsonToProject(byte[] json) throws JsonParseException, JsonMappingException, IOException
{
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);

    JsonNode rootNode = mapper.readValue(json, JsonNode.class);
    int storyCount = rootNode.get("totalItems").asInt();
    ArrayNode itemsNode = (ArrayNode) rootNode.get("items");

    Project project = new Project();

    for (int i = 0; i < storyCount; i++)
    {
        Story story = JsonToStory(rootNode.get(i));
        project.addStory(story);
    }
return project;
}

プロジェクトが単純なストーリーの ArrayList である場合、JsonToStory は次のメソッドです。

public Story JsonToStory(JsonNode rootNode) throws JsonParseException, JsonMappingException, IOException
{
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    Story story = mapper.readValue(rootNode, Story.class);
    return story;
}

Story クラスは次のとおりです。

public class Story {

    private int id;
    private String text = new String();
    private String status = new String();
    private final List<Tag> tags = new ArrayList<Tag>();

    public void setId(int i)
    {
        id = i;
    }

    public void setText(String s)
    {
        text = s;
    }

    public void setStatus(String s)
    {
        status = s;
    }

    public void setTags(Tag[])
    {
        ???
    }
}

get メソッドと print メソッドを使用します。Tag クラスには、単純に 2 つの文字列フィールドが含まれています。

Tag オブジェクトの配列リストを生成するために setTags メソッドを構造化する方法がわかりません。また、役立つものを見つけることができませんでした。

ありがとう!

4

1 に答える 1

0

タグを final としてマークしました。これにより、setter がタグを設定できなくなる可能性があります。これを試すことができます:

public class Story {
    private int id;
    private String text = new String();
    private String status = new String();
    private List<Tag> tags;
    public void setTags(List<Tag> tags){
        this.tags = tags;
    }

また

  public class Story {
    private int id;
    private String text = new String();
    private String status = new String();
    private Tag[] tags;
    public void setTags(Tag[] tags){
        this.tags = tags;
    } 
于 2012-07-18T16:23:10.790 に答える