Javascript 对象转换的JSON数组
这是我的数据数组Javascript 对象转换的JSON数组,javascript,arrays,json,Javascript,Arrays,Json,这是我的数据数组 let data = [{ "name": "s1", "age": 20, "address": "abc" }, { "name": "s2", "age": 21, "address": "def" }]; 我想将数据数组转换为筛选器数组 let filters = [ { "field": "name", "values": [{ "label": "s1"
let data = [{
"name": "s1",
"age": 20,
"address": "abc"
}, {
"name": "s2",
"age": 21,
"address": "def"
}];
我想将数据数组转换为筛选器数组
let filters = [
{
"field": "name",
"values": [{
"label": "s1",
"value": "s1"
}, {
"label": "s2",
"value": "s2"
}]
},
{
"field": "age",
"values": [{
"label": "21",
"value": "21"
}, {
"label": "20",
"value": "20"
}]
},
{
"field": "address",
"values": [{
"label": "abc",
"value": "abc"
}, {
"label": "def",
"value": "def"
}]
}
];
您可以采取一种方法来收集相同的字段及其值。然后获取包含所需项目的对象
const
getValue=v=>({label:v,value:v});
让数据=[{姓名:“s1”,年龄:20岁,地址:“abc”},{姓名:“s2”,年龄:21岁,地址:“def”}],
filters=Array.from(
数据减少((m,o)=>
对象
.条目(o)
.reduce((n[k,v])=>n.set(k,[…(n.get(k)| |[]),getValue(v)]),m),新映射,
([field,values])=>({field,values})
);
控制台日志(过滤器)代码>
.as console wrapper{max height:100%!important;top:0;}
您需要提取第一个元素或所有元素的对象。如果它们可能具有不同的键,则需要通过结果添加所需的结构:
let数据=[{
“名称”:“s1”,
“年龄”:20岁,
“地址”:“abc”
}, {
“名称”:“s2”,
“年龄”:21岁,
“地址”:“def”
}];
让fields=[…新集合(data.map(e=>Object.keys(e)).flat())];//拔出钥匙
//或
/*
让fields=Object.keys(数据[0]);//如果确定所有数组项都具有相同的字段。
*/
让过滤器=字段.map(字段=>({
领域
值:data.map(e=>({
标签:e[字段],
值:e[字段]
}))
}))
log(过滤器)
首先,定义三个Java DTO,如下所示:
public class Data {
private String name;
private String age;
private String address;
// getter setter
}
public class Value {
private String label;
private String value;
}
public class Response {
private String field;
private List<Value> values;
}
公共类数据{
私有字符串名称;
私弦时代;
私有字符串地址;
//吸气剂设定器
}
公共阶级价值{
私有字符串标签;
私有字符串值;
}
公众课堂反应{
私有字符串字段;
私有列表值;
}
第二,主要代码:
public static void main(String[] args) throws Exception {
File file = new File("inputFileName");
TypeReference<List<Data>> reference = new TypeReference<List<Data>>() {
};
ObjectMapper mapper = new ObjectMapper();
List<Data> datas = mapper.readValue(file,reference);
JSONArray object = JSONArray.fromObject(datas);
Iterator iterator = object.iterator();
Map<String,List<Value>> var0 = new HashMap<>();
while (iterator.hasNext()) {
JSONObject jsonObject = (JSONObject) iterator.next();
Set<String> keys = jsonObject.keySet();
for(String key : keys) {
List<Value> values = var0.get(key);
if (null == values) {
values = new ArrayList<>();
values.add(new Value(jsonObject.getString(key),jsonObject.getString(key)));
var0.put(key,values);
} else {
values.add(new Value(jsonObject.getString(key),jsonObject.getString(key)));
}
}
}
List<Response> responses = new ArrayList<>(var0.size());
for(Map.Entry<String,List<Value>>entry:var0.entrySet()) {
Response response = new Response();
response.setField(entry.getKey());
response.setValues(entry.getValue());
responses.add(response);
}
File outPutFile = new File("outputFileName");
mapper.writeValue(outPutFile,responses);
}
publicstaticvoidmain(字符串[]args)引发异常{
文件文件=新文件(“inputFileName”);
TypeReference=新的TypeReference(){
};
ObjectMapper mapper=新的ObjectMapper();
列表数据=mapper.readValue(文件,参考);
JSONArray对象=JSONArray.fromObject(数据);
迭代器迭代器=object.Iterator();
Map var0=新的HashMap();
while(iterator.hasNext()){
JSONObject JSONObject=(JSONObject)迭代器;
Set keys=jsonObject.keySet();
用于(字符串键:键){
列表值=var0.get(键);
if(null==值){
值=新的ArrayList();
add(新值(jsonObject.getString(键),jsonObject.getString(键));
变量0.put(键、值);
}否则{
add(新值(jsonObject.getString(键),jsonObject.getString(键));
}
}
}
列表响应=新的ArrayList(var0.size());
对于(Map.Entryentry:var0.entrySet()){
响应=新响应();
response.setField(entry.getKey());
response.setValues(entry.getValue());
答复。添加(答复);
}
File outPutFile=新文件(“outputFileName”);
writeValue(输出文件,响应);
}
您应该将您尝试过的代码添加到您的问题中,作为提示。