【问题标题】:Is there any way to convert a Map to a JSON representation using Jackson without writing to a file?有没有办法使用 Jackson 将 Map 转换为 JSON 表示而不写入文件?
【发布时间】:2013-07-23 02:02:09
【问题描述】:

我正在尝试使用 Jackson 将 HashMap 转换为 JSON 表示。

但是,我见过的所有方法都涉及先写入文件然后再将其读回,这似乎效率很低。我想知道是否有直接做呢?

这是我想做的一个例子

public static Party readOneParty(String partyName) {
  Party localParty = new Party();
  if(connection==null) {
    connection = new DBConnection();
  } try {
    String query = "SELECT * FROM PureServlet WHERE PARTY_NAME=?";
    ps = con.prepareStatement(query);
    ps.setString(1, partyName);
    resultSet = ps.executeQuery();
    meta = resultSet.getMetaData();
    String columnName, value;
    resultSet.next();
    for(int j=1;j<=meta.getColumnCount();j++) { // necessary to start at j=1 because of MySQL index starting at 1
      columnName = meta.getColumnLabel(j);
      value = resultSet.getString(columnName);
      localParty.getPartyInfo().put(columnName, value); // this is the hashmap within the party that keeps track of the individual values. The column Name = label, value is the value
    }
  }
}

public class Party {

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

  public HashMap<String,String> getPartyInfo() throws Exception {
    return partyInfo;
  }
}

输出看起来像这样

"partyInfo": {
  "PARTY_NAME": "VSN",
  "PARTY_ID": "92716518",
  "PARTY_NUMBER": "92716518"
}

到目前为止,我遇到的每个使用 ObjectMapper 的示例都涉及写入文件然后将其读回。

是否有 Java 的 HashMapMap 的 Jackson 版本,其工作方式与我实现的类似?

【问题讨论】:

标签: java json jackson


【解决方案1】:

将您的地图传递给ObjectMapper.writeValueAsString(Object value)

比使用StringWriteraccording to the docs效率更高:

可用于将任何 Java 值序列化为字符串的方法。功能上相当于用StringWriter调用writeValue(Writer,Object),构造String,但效率更高。

示例

import org.codehaus.jackson.map.ObjectMapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class Example {

    public static void main(String[] args) throws IOException {
        Map<String,String> map = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");

        String mapAsJson = new ObjectMapper().writeValueAsString(map);
        System.out.println(mapAsJson);
    }
}

【讨论】:

  • 给了你支票,因为它提供了一种更有效的方式
  • @davnicwil 我认为应该是new ObjectMapper().writeValueAsString(map)
  • 正确,这是为我做的。谢谢!
  • 我遇到了换行符没有被 \n 替换的问题(这是 JS JSON.stringify 处理换行符的方式)。 ObjectMapper().writeValueAsString() 应该处理换行符吗?如果不是,那么它并没有真正将其转换为 JSON。
  • @SethMcClaine it's not really converting it to JSON - 我不确定你的意思是什么,JSON 不需要换行符。您是在谈论漂亮地打印 JSON 输出以使其更具人类可读性吗?这是一个稍微不同的问题,问题是关于将 HashMap 转换为 JSON 字符串 - 您可能想要也可能不想漂亮地打印该 JSON。此外,JS 中的 JSON.stringify 也不会在 JSON 输出中插入换行符,除非您可以选择将缩进指定为第三个参数。
【解决方案2】:

您可以使用 StringWriter。

package test;

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

public class StringWriterExample {

    private static ObjectMapper objectMapper = new ObjectMapper();

    public static void main(String[] args) throws IOException {

        Map<String,String> map = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");

        StringWriter stringWriter = new StringWriter();

        objectMapper.writeValue(stringWriter, map);

        System.out.println(stringWriter.toString());
    }
}

生产

{"key2":"value2","key1":"value1"}

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 2015-06-03
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2019-03-31
    相关资源
    最近更新 更多