如何将Rest服务返回的JSONArray转换为指定结构的List?
如何转换你的JSON数组结构
根据你提供的需求,核心是将原数组中每个对象的键名映射为新的键名。下面是几种主流编程语言的实现方案,你可以根据自己的技术栈选择:
JavaScript 实现
在前端或 Node.js 环境中,用数组的 map 方法是最简洁的方式:
// 原始JSON数组 const originalArray = [ {"REFDATA_KEY":"Rf1","REFDATA_VALUE":"Daily"}, {"REFDATA_KEY":"Rf2","REFDATA_VALUE":"Weekly"}, {"REFDATA_KEY":"Rf3","REFDATA_VALUE":"Monthly"} ]; // 转换后的数组(注意:统一用小写value保持命名一致性) const convertedArray = originalArray.map(item => ({ value: item.REFDATA_KEY, label: item.REFDATA_VALUE })); console.log(convertedArray);
map 方法会遍历原数组的每个元素,返回一个包含新对象的数组,自动完成键名的映射转换。
Java 实现
如果是后端Java服务,常用Jackson或Gson这类JSON库处理。以下是Jackson的示例:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JsonConverter { public static void main(String[] args) throws Exception { String originalJson = "[ {\"REFDATA_KEY\":\"Rf1\",\"REFDATA_VALUE\":\"Daily\"}, {\"REFDATA_KEY\":\"Rf2\",\"REFDATA_VALUE\":\"Weekly\"}, {\"REFDATA_KEY\":\"Rf3\",\"REFDATA_VALUE\":\"Monthly\"} ]"; ObjectMapper mapper = new ObjectMapper(); JsonNode originalNode = mapper.readTree(originalJson); List<Map<String, String>> convertedList = new ArrayList<>(); for (JsonNode node : originalNode) { Map<String, String> newObj = new HashMap<>(); newObj.put("value", node.get("REFDATA_KEY").asText()); newObj.put("label", node.get("REFDATA_VALUE").asText()); convertedList.add(newObj); } // 也可以用Java 8+ Stream简化写法: // List<Map<String, String>> convertedList = StreamSupport.stream(originalNode.spliterator(), false) // .map(node -> { // Map<String, String> obj = new HashMap<>(); // obj.put("value", node.get("REFDATA_KEY").asText()); // obj.put("label", node.get("REFDATA_VALUE").asText()); // return obj; // }) // .collect(Collectors.toList()); System.out.println(mapper.writeValueAsString(convertedList)); } }
Python 实现
Python 用列表推导式可以快速完成转换,代码非常简洁:
# 原始JSON数组 original_array = [ {"REFDATA_KEY":"Rf1","REFDATA_VALUE":"Daily"}, {"REFDATA_KEY":"Rf2","REFDATA_VALUE":"Weekly"}, {"REFDATA_KEY":"Rf3","REFDATA_VALUE":"Monthly"} ] # 转换后的数组 converted_array = [{"value": item["REFDATA_KEY"], "label": item["REFDATA_VALUE"]} for item in original_array] print(converted_array)
核心思路总结
不管用哪种语言,核心逻辑都是:遍历原数组的每个元素,为每个元素创建新对象,将原对象的 REFDATA_KEY 赋值给新对象的 value,REFDATA_VALUE 赋值给新对象的 label。另外你给出的目标示例中第一个对象的 Value 是大写V,建议统一为小写 value 保持命名一致性,上面的示例都采用了小写命名规范。
内容的提问来源于stack exchange,提问作者user5636236
相关产品推荐
相关产品推荐

