【问题标题】:how to convert List of map to json in java如何在java中将地图列表转换为json
【发布时间】:2017-09-17 15:05:46
【问题描述】:

//请在下面找到代码。我无法将地图转换为json对象

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("readCsv")
public @ResponseBody String readCsvservice(@Context ServletContext servletContext) throws Exception {

    String csvFile = System.getProperty("user.dir") + "/resources/branch_profitability.csv";
    String line = "";
    String cvsSplitBy = ",";

    HashMap<String, String> branch = new HashMap<>();

    List<Map> branchList = new ArrayList<>();

    try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
        br.readLine();
        while ((line = br.readLine()) != null) {

            // use comma as separator
            String[] country = line.split(cvsSplitBy);
            branch.put("Zone", country[0]);
            branch.put("State", country[1]);
            branch.put("City", country[2]);
            branch.put("Location", country[3]);
            branch.put("brach", country[4]);
            branch.put("Employee", country[5]);
            branch.put("EOP", country[6]);
            branchList.add(branch);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
    ObjectMapper objectMapper = new ObjectMapper();

    // try1
    String jsonMap = objectMapper.writeValueAsString(branchList);

    // try2
    String json = new Gson().toJson(branchList);

    return json;

}

【问题讨论】:

  • 有什么问题?
  • 我已经评论了我使用的 try1 和 try2,然后我也无法将 List 转换为 json
  • 它应该可以工作,给你一个 JSON 对象数组。它不是您期望的格式吗?你有例外吗?
  • 我什至没有得到任何异常。
  • 那你怎么知道它失败了?给我们一些工作:D

标签: java json collections jersey gson


【解决方案1】:

看起来您在 while 循环之外创建了一次 HashMap&lt;String, String&gt; branch = new HashMap&lt;&gt;();,但您需要为 csv 中的每一行创建新的 HashMap。

// HashMap<String, String> branch = new HashMap<>(); <= remove this line

List<Map> branchList = new ArrayList<>();

try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
    br.readLine();
    while ((line = br.readLine()) != null) {

        HashMap<String, String> branch = new HashMap<>(); //<= Add this line

        // fill new map...

        branchList.add(branch);
    }

} catch (IOException e) {
    e.printStackTrace();
}

但是你的代码实际上应该生成 csv 中最后一条记录的 json 乘以行数,所以如果你在 json 中没有得到任何东西(甚至没有 []),这意味着你的文件有问题解析。编辑:comment

之后的情况并非如此

【讨论】:

  • 它没有被转换为 json ....在打印地图对象 [ { Employee=59.0, Zone=East, State=WestBengal, EOP=419376.0, City=Siliguri, brach 后得到以下输出=NanakComplex, Location=SevokeRoad }, { Employee=59.0, Zone=East, State=WestBengal, EOP=419376.0, City=Siliguri, brach=NanakComplex, Location=SevokeRoad } ]
  • @Tejal 如果您从未收到 json 响应,但 100% 确定此资源路径已被触发,那么您的 maven/gradle 依赖项可能有问题。这是演示项目github.com/varren/jackson-jersey-json它对我来说很好localhost:9998/readCsv输出是(csv是随机数据)[{"Employee":"NanakComplex","Zone":"59.0","State":"East","EOP":"SevokeRoad","City":"WestBengal","brach":"Siliguri","Location":"419376.0"},{"Employee":"NanakComplex","Zone":"60.0","State":"West","EOP":"SevokeRoad","City":"WestBengal","brach":"Siliguri","Location":"123456.0"}]
  • @Tejal 你能指出你正在打印什么变量吗?正如我所说,我高度怀疑你打印的是假的
  • 我认为这是库问题,我在 Sping 休息服务中使用了相同的代码,它在那里工作。
猜你喜欢
  • 2016-08-24
  • 1970-01-01
  • 2018-02-22
  • 2019-03-24
  • 2022-01-01
  • 1970-01-01
  • 2021-12-22
  • 2015-06-16
  • 1970-01-01
相关资源
最近更新 更多