Zihao88 发表于 2020-11-3 10:05

如何采集二维json数组

如下有很多这样的json:{
    "Data": {
      "Questions": [
            {
                "Number": 1,
                "Content": "你觉得B真是因为爱Y才和TA结婚的吗?",
                "Options": [
                  {
                        "Number": 1,
                        "Content": "是"
                  },
                  {
                        "Number": 2,
                        "Content": "不是"
                  }
                ]
            },
            {
                "Number": 2,
                "Content": "B出轨了但依然对Y很好,你认为TA更多是因为害怕,还是愧疚?",
                "Options": [
                  {
                        "Number": 1,
                        "Content": "前者"
                  },
                  {
                        "Number": 2,
                        "Content": "后者"
                  }
                ]
            },
            {
                "Number": 3,
                "Content": "B重新爱上曾拒绝过自己的人,你觉得TA是出于以下哪种原因?",
                "Options": [
                  {
                        "Number": 1,
                        "Content": "余情未了,深埋的感情重新复活"
                  },
                  {
                        "Number": 2,
                        "Content": "未完成情节,为证明自己的魅力"
                  }
                ]
            }
      ]
    }
}
如何采集到数据库如下格式:

其中qid是Questions每个数组的Number,num是对应Questions里二维数组Options的Number,content也是Options里的Content

gongsui 发表于 2020-11-3 10:11

Data.Questions.Content   之类的

Zihao88 发表于 2020-11-3 10:13

gongsui 发表于 2020-11-3 10:11
Data.Questions.Content   之类的

要采集二维数组Options里的数据,Questions已经采过了;www

gongsui 发表于 2020-11-3 10:23

Data.Questions.Options.Content

Zihao88 发表于 2020-11-3 10:25

gongsui 发表于 2020-11-3 10:23
Data.Questions.Options.Content

这是采集的第一个Options吧,后面的怎么采呢

myy_ccl 发表于 2020-11-3 10:39

处理json的函数一般有size属性,你可以先获取size,然后遍历每个cell
Questions
{
Queation.Number
..
int size=Questions.Options.size();//Questions就是指的第一个cell{Number,Content, Options},如果你每个Options里确定只有两个选项,那么size就肯定是2,不用获取了。直接
Questions.Options.Number
...
Questions.Options.Number
...

}

Zihao88 发表于 2020-11-3 10:52

myy_ccl 发表于 2020-11-3 10:39
处理json的函数一般有size属性,你可以先获取size,然后遍历每个cell
Questions
{


好的,我试下~

sweet_love 发表于 2020-11-3 11:04

根据你这个json格式,建立对象类,反序列化就好啊

Love3295292 发表于 2020-11-3 11:04

本帖最后由 Love3295292 于 2020-11-3 11:06 编辑

简单的遍历代码如下,希望能有所帮助:
data = {
    "Data": {
      "Questions": [
            {
                "Number": 1,
                "Content": "你觉得B真是因为爱Y才和TA结婚的吗?",
                "Options": [
                  {
                        "Number": 1,
                        "Content": "是"
                  },
                  {
                        "Number": 2,
                        "Content": "不是"
                  }
                ]
            },
            {
                "Number": 2,
                "Content": "B出轨了但依然对Y很好,你认为TA更多是因为害怕,还是愧疚?",
                "Options": [
                  {
                        "Number": 1,
                        "Content": "前者"
                  },
                  {
                        "Number": 2,
                        "Content": "后者"
                  }
                ]
            },
            {
                "Number": 3,
                "Content": "B重新爱上曾拒绝过自己的人,你觉得TA是出于以下哪种原因?",
                "Options": [
                  {
                        "Number": 1,
                        "Content": "余情未了,深埋的感情重新复活"
                  },
                  {
                        "Number": 2,
                        "Content": "未完成情节,为证明自己的魅力"
                  }
                ]
            }
      ]
    }
}

if __name__ == '__main__':
    questions = data['Data']['Questions']
    print("qid\tnum\tcontent")
    for question in questions:# 遍历第一层 -> 即Questions
      qid = question['Number']
      options = question['Options']
      for option in options:# 遍历每个即Question中的Options
            num = option['Number']
            content = option['Content']
            print("{}\t{}\t{}".format(qid, num, content))


执行结果示例:

吾日一梦 发表于 2020-11-3 11:47

本帖最后由 吾日一梦 于 2020-11-3 12:00 编辑

大概就是这样

JSONObject jsonObject = JSONObject.parseObject(aa);
      JSONArray jsonArray = jsonObject.getJSONObject("Data").getJSONArray("Questions");

      System.out.println("qid / num / content ");
      for (Object object : jsonArray) {
            JSONObject json = (JSONObject) object;

            String qid = json.getString("Number");


            JSONArray array = json.getJSONArray("Options");
            for (Object obj : jsonArray) {
                JSONObject o = (JSONObject) obj;
                String num = o.getString("Number");
                String content = o.getString("Content");
                System.out.println(qid + " / " + num + " / " + content);
            }
      }

页: [1] 2
查看完整版本: 如何采集二维json数组