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

如何在Jersey 2中接收并解析含可变字段的JSON

处理可变字段JSON的解析方案

嘿,这个场景我之前做项目的时候碰到过,其实核心就是靠你手里的已知属性列表来灵活解析,不用死磕固定的实体类。下面我给你讲讲几种常用语言的具体实现,你按需挑就行:

1. Python 实现

Python里用自带的json模块就够了,先把JSON转成字典,然后拿着已知属性列表去捞值,嵌套字段也能轻松处理。

示例代码:

import json

# 你的示例JSON字符串
json_str = '''{ "Id":"1223-SHD5-33FA-29T7", "Properties" : [ { "someProperty":"someValue", "anotherPropertry":"anotherValue", "subProperty" : { "IP":[ "113.73.47.114", "144.156.146.219", "153.103.248.24" ] }, "oneMoreProperty": [ "someOtherValue" ] } ] }'''

# 解析成字典格式
data = json.loads(json_str)

# 你维护的已知属性列表
known_properties = ["someProperty", "anotherPropertry", "subProperty", "oneMoreProperty", "IP"]

# 遍历Properties里的每个对象
for prop in data["Properties"]:
    # 逐个匹配已知属性
    for key in known_properties:
        # 处理嵌套的IP字段
        if key == "IP" and "subProperty" in prop:
            print(f"IP: {prop['subProperty'].get(key, '未找到该字段')}")
        else:
            value = prop.get(key, '未找到该字段')
            if value != '未找到该字段':
                print(f"{key}: {value}")

如果属性嵌套层级更深,还可以写个递归函数遍历所有层级,自动匹配已知属性,灵活性拉满。

2. Java 实现

Java可以用Jackson或者Gson这类主流JSON库,它们支持动态解析成JsonNode,然后结合已知属性列表遍历提取值。

示例代码(用Jackson):

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class VariableJsonParser {
    public static void main(String[] args) throws IOException {
        String jsonStr = "{ \"Id\":\"1223-SHD5-33FA-29T7\", \"Properties\" : [ { \"someProperty\":\"someValue\", \"anotherPropertry\":\"anotherValue\", \"subProperty\" : { \"IP\":[ \"113.73.47.114\", \"144.156.146.219\", \"153.103.248.24\" ] }, \"oneMoreProperty\": [ \"someOtherValue\" ] } ] }";
        
        ObjectMapper mapper = new ObjectMapper();
        JsonNode rootNode = mapper.readTree(jsonStr);
        
        // 已知属性列表
        List<String> knownProps = Arrays.asList("someProperty", "anotherPropertry", "subProperty", "oneMoreProperty", "IP");
        
        JsonNode propertiesNode = rootNode.get("Properties");
        if (propertiesNode.isArray()) {
            for (JsonNode propNode : propertiesNode) {
                for (String prop : knownProps) {
                    if (prop.equals("IP")) {
                        // 处理嵌套的IP字段
                        JsonNode subPropNode = propNode.get("subProperty");
                        if (subPropNode != null && subPropNode.has(prop)) {
                            System.out.println("IP: " + subPropNode.get(prop));
                        }
                    } else {
                        if (propNode.has(prop)) {
                            System.out.println(prop + ": " + propNode.get(prop));
                        }
                    }
                }
            }
        }
    }
}

3. C# 实现

C#里用Json.NET(Newtonsoft.Json)或者内置的System.Text.Json都可以,把JSON转成JObject后动态访问属性就行。

示例代码(用Json.NET):

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        string jsonStr = @"{ ""Id"":""1223-SHD5-33FA-29T7"", ""Properties"" : [ { ""someProperty"":""someValue"", ""anotherPropertry"":""anotherValue"", ""subProperty"" : { ""IP"":[ ""113.73.47.114"", ""144.156.146.219"", ""153.103.248.24"" ] }, ""oneMoreProperty"": [ ""someOtherValue"" ] } ] }";
        
        JObject data = JObject.Parse(jsonStr);
        List<string> knownProps = new List<string> { "someProperty", "anotherPropertry", "subProperty", "oneMoreProperty", "IP" };
        
        foreach (JToken prop in data["Properties"]) {
            foreach (string key in knownProps) {
                if (key == "IP") {
                    JToken subProp = prop["subProperty"];
                    if (subProp?[key] != null) {
                        Console.WriteLine($"IP: {subProp[key]}");
                    }
                } else {
                    JToken value = prop[key];
                    if (value != null) {
                        Console.WriteLine($"{key}: {value}");
                    }
                }
            }
        }
    }
}

通用思路总结

不管用哪种语言,核心逻辑都是这三步:

  • 第一步:把JSON解析成语言支持的动态数据结构(比如Python的dict、Java的JsonNode),别强行绑定固定实体类——毕竟字段是可变的,固定类会直接失效。
  • 第二步:维护好你的已知属性列表,这是整个方案的核心,你得提前明确可能出现的字段。
  • 第三步:遍历动态数据结构,结合已知属性列表匹配提取值,嵌套字段单独做层级判断,或者用递归遍历处理深层结构。

如果已知属性列表会动态更新,还可以把它放到配置文件里,不用每次改代码,灵活性会更高。

内容的提问来源于stack exchange,提问作者DrunkOnBytes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:27:25