【问题标题】:Create JSON object from List in Java从 Java 中的 List 创建 JSON 对象
【发布时间】:2020-07-16 13:58:15
【问题描述】:

我有一个List<String>,其中每个元素代表一个节点,还有一个String,它是对应于该列表最后一个节点的值。该列表表示值的路径。所以,基本上列表的每个元素都是前一个元素的值。我想使用 Jackson 从中创建一个 JSON 对象。但是,这需要动态完成,而不是显式设置 JSON 对象的节点,因为列表并不总是相同的。

所以,我想知道是否有一种方法可以转换或遍历列表并创建 JSON 对象。 因此,如果我的列表如下所示:

["user", "car", "brand"] 且值为“BMW”,JSON 对象应如下所示:

{
   "user":
      {
        "car":
          {
            "brand": "BMW"
          }
      }
}

【问题讨论】:

  • 您可能只需要编写自己的代码即可。
  • 您可以定义一个函数,在给定的 JSON 对象中创建一个 JSON 字段,为该字段分配一个新的 JSON 对象,然后返回该新的 JSON 对象。然后,您可以遍历您的列表,每次调用该函数时使用上一次迭代返回的值。迭代完成后,赋值。

标签: java json spring-boot jackson


【解决方案1】:

反向遍历列表,并在每次迭代时为列表元素创建一个新的 JsonNode,将先前的 JsonNode 作为子节点添加到新的 JsonNode 中,并用新的 JsonNode 覆盖原始引用。冲洗并重复。

类似...

final String value = "BMW"; // whatever the final "value" is.
final ObjectMapper objectMapper = new ObjectMapper();

ObjectNode json = null;

for (int i = list.size() - 1; i >= 0; i--) {

  final String prop = list.get(i);
  final ObjectNode objectNode = objectMapper.createObjectNode();

  if (json == null) {
    objectNode.put(prop, value);
  } else {
    objectNode.put(prop, json);
  }

  json = objectNode;
}

【讨论】:

    【解决方案2】:

    这是你需要的一段代码

    package uk.co.vishal;
    
    import com.fasterxml.jackson.core.JsonProcessingException;
    import org.json.JSONObject;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class Answer {
    
    public static void main(String[] args) throws JsonProcessingException {
        List<String> data = new ArrayList<>();
        data.add("user");
        data.add("car");
        data.add("brand");
    
        System.out.println(data.toString());
    
        Map<String, String> mydata = new HashMap<>();
        Map<String, JSONObject> newdata = new HashMap<>();
        JSONObject result = new JSONObject();
        boolean flag = true;
    
        for (int i = data.size() - 1; i >= 0; i--) {
            if (flag) {
                mydata.put(data.get(i), "BMW");
                result = generateJson(mydata);
                flag = false;
            } else {
                newdata.put(data.get(i), result);
                result = generateJson(newdata);
                newdata.clear();
            }
        }
        System.out.println(result);
        /*
        * Here is the output:
        * {
            "user": {
                "car": {
                        "brand": "BMW"
                    }
                }
          }
        *
        * */
    }
    
    private static JSONObject generateJson(Map data) {
        return new JSONObject(data);
    }
    

    }

    希望你能被分类!!

    【讨论】:

      猜你喜欢
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多