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

如何在Java中从JSON数组精准查询指定Command对应的commandResponse

问题:根据指定Command值获取对应commandResponse

需求说明

  • 从给定JSON数组中,根据精确匹配的command值(区分大小写和完整指令,比如show version与show version log为不同指令),获取对应的commandResponse值。
  • 示例:匹配show version时,应返回16.0.1。

目标JSON数组

[{"commandResponse":"","errorMessage":"harddisk crash not applicable.","name":"harddiskcrash","command":"harddiskcrash","status":"NotApplicable"},{"commandResponse":"","errorMessage":"stby-harddisk crash not applicable.","name":"stby-harddiskcrash","command":"stby-harddiskcrash","status":"NotApplicable"},{"commandResponse":"16.0.1","errorMessage":"_showconfigall not applicable.","name":"show_version","command":"show version","status":"NotApplicable"},{"commandResponse":"","errorMessage":"_showpolicy-map not applicable.","name":"_showpolicy-map","command":"_showpolicy-map","status":"NotApplicable"},{"commandResponse":"","errorMessage":"system dirvarlog not applicable.","name":"show version log","command":"show version log","status":"NotApplicable"}]

当前尝试与错误

尝试用JsonPath实现时,编写了以下代码:

List<Map<String, Object>> finalDataList = commandsData.read("$[?(@.command == 'Show Version')]");

触发错误:

The method parse(String) is undefined for the type JsonPath

注:当前使用的JSON解析库为com.googlecode.json-simple,commandsData为已解析的JSON数组对象。

解决方案

方案1:基于现有json-simple库实现

无需引入额外依赖,直接遍历JSON数组完成精确匹配:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

// 假设commandsData是已加载好的JSONArray对象
String targetCommand = "show version";
String commandResponse = "";

for (Object obj : commandsData) {
    JSONObject commandObj = (JSONObject) obj;
    String cmd = (String) commandObj.get("command");
    if (targetCommand.equals(cmd)) {
        commandResponse = (String) commandObj.get("commandResponse");
        break; // 找到匹配项后终止遍历
    }
}

// 输出结果
System.out.println(commandResponse); // 输出16.0.1

该方案优势:

  • 适配当前使用的json-simple库,无额外依赖
  • 严格区分指令大小写与完整字符串,完全满足需求

方案2:正确使用JsonPath(若需切换依赖)

若要使用JsonPath,需修正依赖与代码写法:

  1. 引入正确的JsonPath依赖(如com.jayway.jsonpath:json-path),替代json-simple
  2. 修正代码逻辑:注意JsonPath的调用方式,以及大小写敏感匹配(原代码中'Show Version'与目标指令大小写不一致,需修正)

示例代码:

import com.jayway.jsonpath.JsonPath;
import java.util.List;
import java.util.Map;

// 假设jsonString是原始JSON数组的字符串形式
String jsonString = "[{\"commandResponse\":\"\",\"errorMessage\":\"harddisk crash not applicable.\",\"name\":\"harddiskcrash\",\"command\":\"harddiskcrash\",\"status\":\"NotApplicable\"},...]";
String targetCommand = "show version";

// 精确匹配command值,保持大小写一致
List<Map<String, Object>> result = JsonPath.read(jsonString, "$[?(@.command == '" + targetCommand + "')]");

if (!result.isEmpty()) {
    String response = (String) result.get(0).get("commandResponse");
    System.out.println(response); // 输出16.0.1
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:50:32