【问题标题】:Get Inner Json String Data from Main Json String using Gson使用 Gson 从主 Json 字符串中获取内部 Json 字符串数据
【发布时间】:2014-03-21 10:21:10
【问题描述】:

我正在使用Gson 来解析来自 Json 字符串的数据。一切正常。
但是现在,Main Json String 包含内部 Json 字符串,我想要内部 Json String 的数据。如何获得?

查看我的Json String

[{"Question":"Are you inclined to:","QId":"2","Options":[{"Option":"Argue or debate issues","OptionId":"4"},{"Option":"Avoid arguments","OptionId":"5"},{"Option":"Swutch topics","OptionId":"6"}]}]

在这里,我想要“选项”的值。

我的示例代码如下:

    PrimaryTest[] testlist = gson.fromJson(result, PrimaryTest[].class); // result is Json String.
    List<PrimaryTest> lstTest = Arrays.asList(testlist);
    PrimaryTest objTest = lstTest.get(0);
    String Question = objTest.getQuestion();

在这里,我完美地获得了 Question 价值,但不知道如何获得 Options 价值。如果我使用相同的方法,那么它会给出错误:Invalid Json DataPrimaryTest.java 代码:

public class PrimaryTest {

    private String Question;

    public PrimaryTest(String Question) {
        this.Question = Question;
    }

    public void setQuestion(String Question) {
        this.Question = Question;
    }

    public String getQuestion() {
        return this.Question;
    }
}

【问题讨论】:

  • 请为您的 PriamryTest 类添加代码(它的实例应该从 json 字符串中反序列化)
  • @ShmilTheCat,查看更新后的帖子。
  • "Options" 位于数组内的对象内。访问数组元素(List)得到对象(Map),然后提取“Options”,这将是一个对象(Map)。您不能将其提取为字符串。如果您想要一个字符串,请通过 JSON 编码器运行对象/映射。 (为此烦恼 POJO 是愚蠢的——它们只会碍事。)
  • @HotLicks,你能给我举个例子吗?
  • 您的意思是为您编写代码?我在上面清楚地描述了它。 List list = parse(jsonString); Map map1 = list[0]; Map map2 = map1.get("Options"); String innerJson = serialize(map2); 只需替换您选择的解析器使用的方法和类型。

标签: java json string gson


【解决方案1】:

编写包含 JSON 字符串包含的参数的类,以便您可以直接将字符串解析为类对象。
您的 PrimaryTest 类应包含以下成员:

public class PrimaryTest {  
    private String Question;  
    private int QId;  
    private List<Option> Options;  

    //Getter and Setter methods here
}  

您的Option 类包含如下所示的成员:

public class Option{  
   private String Option;  
   private int OptionId;  

   // Getter and Setter methods
}    

现在将您的 JSON 字符串解析为 PrimaryTest 类,并从类的 getter 方法中获取您的 Options 列表。

下面是测试代码:

PrimaryTest[] response = gson.fromJson(json, PrimaryTest[].class);
List<PrimaryTest> lstTest = Arrays.asList(response);
PrimaryTest objTest = lstTest.get(0);

List<Option> options = objTest.getOptions();
for(Option option : options){
    System.out.println(option.getOption());
}

【讨论】:

  • 是的,这是完美的解决方案。我已经解决了我的问题。
【解决方案2】:

提示物体可能是怎样的。

OptionClass{
String Option 
int/long OptionId
}

QuestionClass{
String Question
int/long QId
Collection<OptionClass> Options
}

注意:这不是 java 类。根据提示设计您的课程。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多