You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin或Java中解析动态键JSON响应为字符串列表

动态键JSON值提取实现方案

你可以直接用主流JSON库的树解析或Map类型转换能力实现,无需预定义对应键的Model类,核心思路是将data节点直接转换为Map<String, String>类型,直接提取Map的values集合即可,以下是Jackson和Gson两种常用库的Java、Kotlin实现:

1. Jackson实现

Java版本

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.List;
import java.util.Map;

public class DynamicJsonParser {
    private static final ObjectMapper objectMapper = new ObjectMapper();

    public static List<String> extractDataValues(String jsonContent) throws Exception {
        JsonNode root = objectMapper.readTree(jsonContent);
        JsonNode dataNode = root.get("data");
        Map<String, String> dataMap = objectMapper.convertValue(dataNode, new TypeReference<Map<String, String>>() {});
        return dataMap.values().stream().toList();
    }
}

Kotlin版本

import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper

private val objectMapper: ObjectMapper = jacksonObjectMapper()

fun extractDataValues(jsonContent: String): List<String> {
    val root: JsonNode = objectMapper.readTree(jsonContent)
    val dataMap = objectMapper.convertValue(
        root.get("data"),
        object : TypeReference<Map<String, String>>() {}
    )
    return dataMap.values.toList()
}

2. Gson实现

Java版本

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;

import java.util.List;
import java.util.Map;

public class DynamicJsonParser {
    private static final Gson gson = new Gson();

    public static List<String> extractDataValues(String jsonContent) {
        JsonObject root = gson.fromJson(jsonContent, JsonObject.class);
        JsonObject dataNode = root.getAsJsonObject("data");
        Map<String, String> dataMap = gson.fromJson(dataNode, new TypeToken<Map<String, String>>(){}.getType());
        return List.copyOf(dataMap.values());
    }
}

Kotlin版本

import com.google.gson.Gson
import com.google.gson.JsonObject
import com.google.gson.reflect.TypeToken

private val gson = Gson()

fun extractDataValues(jsonContent: String): List<String> {
    val root = gson.fromJson(jsonContent, JsonObject::class.java)
    val dataType = object : TypeToken<Map<String, String>>() {}.type
    val dataMap = gson.fromJson<Map<String, String>>(root.getAsJsonObject("data"), dataType)
    return dataMap.values.toList()
}

以上实现对键的数量、键名没有任何要求,哪怕键数量过万也能正常解析,无额外性能损耗。

内容的提问来源于stack exchange,提问作者Abbas Khan Waliullahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:48:03