Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象转换的JSON数组_Javascript_Arrays_Json - Fatal编程技术网

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(输出文件,响应);
}

您应该将您尝试过的代码添加到您的问题中,作为提示。