如何将JSONArray解析为JSON字段?

xdnvmnnf  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(110)

如标题所示,我想使用Java将JSONArray(在“splits”字段中定义)转换为JSON字段。我在这里找不到类似的主题,如果我错过了什么,请让我知道。
我的JSON代码如下所示:

{
  "carId": 1001,
  "driverIndex": 0,
  "laptime": 173001,
  "isValidForBest": false,
  "splits": [
    91851,
    52002,
    29147
  ]
},
{
  "carId": 1001,
  "driverIndex": 0,
  "laptime": 107270,
  "isValidForBest": true,
  "splits": [
    26295,
    51960,
    29015
  ]
}

字符串
我想实现这样的目标:

{
  "carId": 1001,
  "driverIndex": 0,
  "laptime": 173001,
  "isValidForBest": false,
  "sector1": 91851,
  "sector2": 52002,
  "sector3": 29147
},
{
  "carId": 1001,
  "driverIndex": 0,
  "laptime": 107270,
  "isValidForBest": true,
  "sector1": 26295,
  "sector2": 51960,
  "sector3": 29015
}


我找到了一些方法来解决这个问题,将数组解析为一个新的对象,但如果可能的话,我不想创建它,因为另一个对象会使进一步的代码变得更加复杂,我希望它尽可能简单。“splits”字段中的值也不在其他任何地方使用。
我试着从Jackson包中使用JsonNode和ObjectNode,但是从ArrayNode转换到ObjectNode时出现了问题,在web上找不到任何有用的东西。

qc6wkl3g

qc6wkl3g1#

假设输入是一个纸牌数组

JsonNode root = new ObjectMapper().readTree(jsonString);
root.forEach(
        card -> {
            ObjectNode cardObject = (ObjectNode) card;
            ArrayNode splits = (ArrayNode) cardObject.remove("splits");
            for(int i=0; i < splits.size(); i++) {
                cardObject.put("sector"+i, splits.get(i));
            }
        }
);
return root;

字符串

mu0hgdu0

mu0hgdu02#

您可以遍历JSONArray,提取各个值,并将它们作为单独的字段添加到现有JSON对象中:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JSONArrayToJSONFields {
    public static void main(String[] args) {
        String jsonInput = "{\n" +
                "  \"carId\": 1001,\n" +
                "  \"driverIndex\": 0,\n" +
                "  \"laptime\": 173001,\n" +
                "  \"isValidForBest\": false,\n" +
                "  \"splits\": [\n" +
                "    91851,\n" +
                "    52002,\n" +
                "    29147\n" +
                "  ]\n" +
                "}";

        ObjectMapper mapper = new ObjectMapper();
        try {
            JsonNode rootNode = mapper.readTree(jsonInput);

字符串

相关问题