Java 来自RESTFul的Json

Java 来自RESTFul的Json,java,json,spring,rest,Java,Json,Spring,Rest,我正在尝试创建Spring Restful服务,该服务将返回: {“计数”:[{“SearchText1”:11},{“SearchText2”:16},{“SearchText3”:8}]} 其中,“SearchText1”是要在文档中搜索的文本,11是重复次数 我一直在尝试将这个Json建模为java类以返回,这样就可以将其序列化为Json,但还没有成功 public class CountResultWrapper { List<CountResult> coun

我正在尝试创建Spring Restful服务,该服务将返回:

{“计数”:[{“SearchText1”:11},{“SearchText2”:16},{“SearchText3”:8}]}

其中,“SearchText1”是要在文档中搜索的文本,11是重复次数

我一直在尝试将这个Json建模为java类以返回,这样就可以将其序列化为Json,但还没有成功

 public class CountResultWrapper {

     List<CountResult> counts = new  ArrayList<CountResult>();

    public List<CountResult> getCounts() {
        return counts;
    }

    public void setCounts(List<CountResult> counts) {
        this.counts = counts;
    }

    }

public class CountResult {

    String searchText;
    Integer count;


    public CountResult(String searchText,Integer count)
    {
        this.searchText = searchText;
        this.count = count;
    }

    public String getSearchText() {
        return searchText;
    }
    public void setSearchText(String searchText) {
        this.searchText = searchText;
    }
    public Integer getCount() {
        return count;
    }
    public void setCount(Integer count) {
        this.count = count;
    }

}

有人能帮我一下吗?

因为字段名是动态的,所以不能使用模型类直接实现,因为不能为每个searchtext记录创建新字段

然而,它可以通过使用下面的方法来实现——对于大容量来说可能成本高昂,但它会返回您预期的输出

        List<HashMap<String, Integer>> counts = new ArrayList<>();
        counts.add(new HashMap<String, Integer>() {{put("SearchText1",11);}});
        counts.add(new HashMap<String, Integer>() {{put("SearchText2",11);}});

        JSONObject output = new JSONObject();
        output.put("counts",counts);
        System.out.println(output.toString());

由于字段名是动态的,因此无法使用模型类直接实现,因为您不能为每个searchtext记录创建新字段

然而,它可以通过使用下面的方法来实现——对于大容量来说可能成本高昂,但它会返回您预期的输出

        List<HashMap<String, Integer>> counts = new ArrayList<>();
        counts.add(new HashMap<String, Integer>() {{put("SearchText1",11);}});
        counts.add(new HashMap<String, Integer>() {{put("SearchText2",11);}});

        JSONObject output = new JSONObject();
        output.put("counts",counts);
        System.out.println(output.toString());

我必须告诉你,用这种方法你不能得到你想要的结果。控制台输出适合您的情况。将
ConutResult
转换为json对象时,字段名将被放入
键中
,字段值将被放入
值中
。比如:

{"searchText":"xxx", "count":xxx}
如果您真的想这样做,您可能需要3个课程:

class CountResult1{
    private int searchText1;
}

class CountResult2{
    private int searchText2;
}

class CountResult3{
    private int searchText3;
}
然后,这3个类可以转换为:

{"searchText1":xxx}, {"searchText2":xxx}, {"searchText3":xxx}

我必须告诉你,用这种方法你不能得到你想要的结果。控制台输出适合您的情况。将
ConutResult
转换为json对象时,字段名将被放入
键中
,字段值将被放入
值中
。比如:

{"searchText":"xxx", "count":xxx}
如果您真的想这样做,您可能需要3个课程:

class CountResult1{
    private int searchText1;
}

class CountResult2{
    private int searchText2;
}

class CountResult3{
    private int searchText3;
}
然后,这3个类可以转换为:

{"searchText1":xxx}, {"searchText2":xxx}, {"searchText3":xxx}

您可以添加此类并使用。该响应为响应提供json输出。但是您不需要http响应,那么返回类型可以更改为JSONObject输出

 import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import org.springframework.http.ResponseEntity;

public class JesonCreater {


public ResponseEntity<?> responseProvider(CountResultWrapper wrapper){
    Map<String,List<HashMap<String, Integer>>> responseMap=new HashMap<>();
    List<CountResult> counts=wrapper.getCounts();
    List<HashMap<String, Integer>> countListMap = new ArrayList<>();
    for (CountResult count : counts) {
        HashMap<String, Integer> countMap=new HashMap<>();
        countMap.put(count.getSearchText(), count.getCount());
        countListMap.add(countMap);         
    }
    responseMap.put("count", countListMap);
    return ResponseEntity.ok(responseMap);
}
}

您可以添加此类并使用。该响应为响应提供json输出。但是您不需要http响应,那么返回类型可以更改为JSONObject输出

 import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import org.springframework.http.ResponseEntity;

public class JesonCreater {


public ResponseEntity<?> responseProvider(CountResultWrapper wrapper){
    Map<String,List<HashMap<String, Integer>>> responseMap=new HashMap<>();
    List<CountResult> counts=wrapper.getCounts();
    List<HashMap<String, Integer>> countListMap = new ArrayList<>();
    for (CountResult count : counts) {
        HashMap<String, Integer> countMap=new HashMap<>();
        countMap.put(count.getSearchText(), count.getCount());
        countListMap.add(countMap);         
    }
    responseMap.put("count", countListMap);
    return ResponseEntity.ok(responseMap);
}
}

我就是这样解决的:

    List<HashMap<String, Integer>> countsList = new ArrayList<>();
    searchTexts.forEach(searchText ->{
         countsList.add(new HashMap<String, Integer>()
         {{put(searchText,countMap.get(searchText.toUpperCase()) == null ? 0 : countMap.get(searchText.toUpperCase()));}});
    });
    Map<String, List<HashMap<String, Integer>>> response = new HashMap<>();
    response.put("counts", countsList);
List countsList=new ArrayList();
searchText.forEach(searchText->{
countsList.add(新的HashMap()
{{put(searchText,countMap.get(searchText.toUpperCase())==null?0:countMap.get(searchText.toUpperCase());}};
});
Map response=newhashmap();
响应。put(“计数”,计数列表);

我就是这样解决的:

    List<HashMap<String, Integer>> countsList = new ArrayList<>();
    searchTexts.forEach(searchText ->{
         countsList.add(new HashMap<String, Integer>()
         {{put(searchText,countMap.get(searchText.toUpperCase()) == null ? 0 : countMap.get(searchText.toUpperCase()));}});
    });
    Map<String, List<HashMap<String, Integer>>> response = new HashMap<>();
    response.put("counts", countsList);
List countsList=new ArrayList();
searchText.forEach(searchText->{
countsList.add(新的HashMap()
{{put(searchText,countMap.get(searchText.toUpperCase())==null?0:countMap.get(searchText.toUpperCase());}};
});
Map response=newhashmap();
响应。put(“计数”,计数列表);

参见感谢我修改了代码并添加了代码如果您想创建自己的JSON,请手工制作,或者将类更改为Suitese谢谢我修改了代码并添加了代码如果您想创建自己的JSON,请手工制作,或者更改类以适应