如何使JSON在lopp内部循环

时间:2014-06-11 06:11:37

标签: java json spring hibernate

我有以下表client_question表

+----+------------+---------+-----+------+------+
| id | is_deleted | version | cid | pqid | qtid |
+----+------------+---------+-----+------+------+
|  1 |            |       0 |   1 |    1 |    1 |
|  2 |            |       0 |   1 |    2 |    4 |
|  3 |            |       0 |   1 |    2 |    4 |
+----+------------+---------+-----+------+------+

这是Parent_question表

+----+------------+---------+-----+------+
| id | is_deleted | version | pid | qid  |
+----+------------+---------+-----+------+
|  1 |            |       0 |   1 |    1 |
|  2 |            |       0 |   1 |    2 |
|  3 |            |       0 |   1 |    3 |
|  4 |            |       0 |   1 |    4 |
|  5 |            |       0 |   1 |    5 |
|  6 |            |       0 |   1 |    6 |
|  7 |            |       0 |   2 |    7 |
|  8 |            |       0 |   2 |    1 |
|  9 |            |       0 |   2 |    2 |
| 10 |            |       0 |   2 |    8 |
| 11 |            |       0 |   3 |    9 |
| 12 |            |       0 |   3 |    1 |
| 13 |            |       0 |   3 |   10 |
| 14 |            |       0 |   3 |   11 |
| 15 |            |       0 |   4 |   12 |
+----+------------+---------+-----+------+

这是question_option

+----+------------+-----------+---------+
| id | is_deleted | name      | version |
+----+------------+-----------+---------+
|  1 |            | Excellent |       0 |
|  2 |            | Good      |       0 |
|  3 |            | Fair      |       0 |
|  4 |            | Poor      |       0 |
+----+------------+-----------+---------+

我想检索JSON并通过ajax发送到前端 我试过这种方式

public List<ClientQuestionOption> getSavedQuestionOptions(Long parentId,long clientId)
{
    Client client = (Client) entityManagerUtil.find(Client.class, clientId);
    List<ClientQuestionOption>  questionsList =     (List<ClientQuestionOption>)serviceClientDaoImpl.getSavedQuestionOptionsList(parentId,client);
    System.out.println("The size is nnnnnnnnnn "+questionsList.size());
    List optionsList =new ArrayList();

    for(int i=0;i<questionsList.size();i++)
    {
        //optionsList.add(questionsList.get(i).getCqid().getId());
        //optionsList.add(questionsList.get(i).getOid().getName());
        Map map=new HashMap();
        map.put("qid", questionsList.get(i).getCqid().getPqid().getQid().getId());
        map.put("name", questionsList.get(i).getOid().getName());
        optionsList.add(map);

    }
return optionsList;

}

我得到的JSON就像这样

[
{
name: "Excellent",
qid: 2
},
{
name: "Poor",
qid: 2
}
],

但我想要像这样的JSON

 {
      "options": [
        "Poot",
        "Excellent"
      ],
      "qid": 2
    },

有人可以告诉我该怎么做吗?

修改

按照我的方式制作JSON

    JSONObject object=new JSONObject();
List optionslist=null;
optionslist=(List<ClientQuestionOption>)serviceClientServiceImpl.getSavedQuestionOptions(parentId , Long.valueOf(clientId) );
    object.accumulate("optionslist",optionslist );

    return object.toString();

2 个答案:

答案 0 :(得分:0)

首先,实现函数返回的内容(ArrayList)根本不是JSON。它似乎发生在其他地方。您需要将JsonObject()替换为JsonArray(),才能将[..]更改为“{..}`。

其次,要按qid进行分组,您可以编写一个以List<ClientQuestionOption>作为输入和输出的函数。

答案 1 :(得分:0)

您应该查看Google GSON项目,以下是您的代码:

public class ClientQuestionOption {
    String name;
    int qid;

    public ClientQuestionOption() {
    }

    public ClientQuestionOption(String name, int qid) {
        this.name = name;
        this.qid = qid;
    }
}

然后以这种方式使用它:

public static void main(String[] args) {
    List<ClientQuestionOption> questionOptions = Arrays.asList(
            new ClientQuestionOption("Excellent", 1),
            new ClientQuestionOption("Excellent", 2),
            new ClientQuestionOption("Poor", 3)
    );

    Gson gson = new GsonBuilder().setPrettyPrinting().create();

    System.out.println(gson.toJson(questionOptions));
}

您只需要具有相同字段名称的Class(或声明限定符),gson将处理从/到json的转换。

这是上述代码的输出:

[
  {
    "name": "Excellent",
    "qid": 1
  },
  {
    "name": "Excellent",
    "qid": 2
  },
  {
    "name": "Poor",
    "qid": 3
  }
]