【问题标题】:mapping resultset to json将结果集映射到 json
【发布时间】:2012-06-11 08:38:27
【问题描述】:

我有一些结果集数据如下:

+-------+-------+-------+-------+
| Code1 | Code2 | Code3 | Code4 |
+-------+-------+-------+-------+
|     1 |    11 |   111 |  1111 |
|     2 |    21 |   211 |  2111 |
|     2 |    22 |   221 |  2211 |
|     2 |    21 |   212 |  2121 |
+-------+-------+-------+-------+

我需要将上面的结果集转换为以下两个json。

code1_code2 = {
               1 : [11],
               2 : [21, 22, 21]
              };

code2_code3 = {
               11 : [111],
               21 : [211, 212],
               22 : [221]
              };

我已经尝试解析结果集,并且在订购第一列时,我可以获得第一个 json。 但由于第二列没有排序,我无法获得第二个 json。

(注意:- 我不会得到第二列的排序)

【问题讨论】:

  • 编写一个循环将值转换为数据结构(可能是 hashmap)并使用一些 json lib(可能是 GSON)将其转换为 json

标签: java json resultset


【解决方案1】:

注意

JSON 的名称/值对中的名称应该是字符串(不是您问题中的数字)。


(来源:json.org

示例代码

正如@josnidhin 的评论中提到的,无论结果集是否有序,您都可以使用Map 来存储这些数据。

这是一个示例代码,我选择json-lib 来处理 JSON 内容。

package test;

import java.sql.*;
import java.util.*;
import java.util.concurrent.*;

import net.sf.json.*;

public class StackOverflowQ10976771_ResultSetToJSON
{
    public static void appendValue (Map<String,  List<Integer>> map, String key, int value)
    {
        List<Integer> values = map.get (key);
        if (values == null)
        {
            values = new ArrayList<Integer> ();
            map.put (key, values);
        }
        values.add (value);
    }

    public static void main (String[] args)
    {
        Map<String, List<Integer>> code1_code2 = new ConcurrentSkipListMap<String, List<Integer>> ();
        Map<String, List<Integer>> code2_code3 = new ConcurrentSkipListMap<String, List<Integer>> ();
        Map<String, List<Integer>> code3_code4 = new ConcurrentSkipListMap<String, List<Integer>> ();

        int[][] sample_resultSet = {
                {1, 11, 111, 1111},
                {2, 21, 211, 2111},
                {2, 22, 221, 2211},
                {2, 21, 212, 2121},
        };

        //ResultSet rs = null;
        //while (rs.next ())
        for (int[] rs : sample_resultSet)
        {
            appendValue (code1_code2, String.valueOf(rs[0]), rs[1]);
            appendValue (code2_code3, String.valueOf(rs[1]), rs[2]);
            appendValue (code3_code4, String.valueOf(rs[2]), rs[3]);
        }

        System.out.println ("code1_code2 =");
        System.out.println (JSONObject.fromObject (code1_code2).toString(4 ,4) + ";");
        System.out.println ();

        System.out.println ("code2_code3 = ");
        System.out.println (JSONObject.fromObject (code2_code3).toString(4 ,4) + ";");
        System.out.println ();

        //System.out.println ("code3_code4 = ");
        //System.out.println (JSONObject.fromObject (code3_code4).toString(4 ,4) + ";");
        //System.out.println ();
    }
}

样本输出

code1_code2 =
    {
        "1": [11],
        "2":         [
            21,
            22,
            21
        ]
    };

code2_code3 = 
    {
        "11": [111],
        "21":         [
            211,
            212
        ],
        "22": [221]
    };

【讨论】:

    【解决方案2】:

    你必须先建立一个树形结构。然后将树的每一层输出为 JSON。这基本上是 BFS 的微小变化(也称为级别顺序遍历)。

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 2017-06-24
      • 1970-01-01
      • 2021-12-17
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多