在我的程序中,我正在调用一个返回用户列表的api。然而,结果就像这样包装在样板中。
{
"d": {
"result" : [ ... here the actual lsit ... ]
}
}
我想解析结果,但是我找不到从我的传入json字符串中删除“d”和“result”的简单方法
我开始为暂存用户实体创建自己的类,因为结果集与我的用户实体不完全匹配
class StagingUser {
// same props as api response per user
}
我的想法是解析像这样的用户
private List<StagingUser> parseResult(@RequestBody List<StagingUser> stagingUsers) {
return stagingUsers;
}
然而,它需要我摆脱样板结果
答案 0 :(得分:3)
您可以使用gson库。 gson-2.8.0.jar
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
public class StagingUser
{
private String hi;
private String name;
private String lastName;
public StagingUser()
{
}
public String getHi ( )
{
return hi;
}
public void setHi ( String hi )
{
this.hi = hi;
}
public String getName ( )
{
return name;
}
public void setName ( String name )
{
this.name = name;
}
public String getLastName ( )
{
return lastName;
}
public void setLastName ( String lastName )
{
this.lastName = lastName;
}
@Override
public String toString ( )
{
return "StagingUser [hi=" + hi + ", name=" + name + ", lastName=" + lastName + "]";
}
}
这是获取json字符串格式,解析忽略d包装器,然后将属性设置为StagingUsers。打印所有内容是为了提供信息
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class JsonTest
{
public static void main ( String [ ] args )
{
String jsonInString = "{ \"d\": { \"result\" : [ \"hello\", \"Frank\", \"Provost\" ] } }";
System.out.println ( "Printing JSON String" );
System.out.println ( jsonInString );
System.out.println ( );
JsonParser parser = new JsonParser();
JsonObject jsonObject = parser.parse(jsonInString).getAsJsonObject().get("d").getAsJsonObject();
JsonArray jsonArray = jsonObject.get("result").getAsJsonArray();
System.out.println ( "Printing result elements" );
for( JsonElement property : jsonArray)
{
System.out.println ( property.getAsString ( ));
}
System.out.println ( );
StagingUser user = new StagingUser ( );
user.setHi ( jsonArray.get ( 0 ).getAsString ( ) );
user.setName ( jsonArray.get ( 1 ).getAsString ( ) );
user.setLastName ( jsonArray.get ( 2 ).getAsString ( ) );
System.out.println ( "Printing POJO: " );
System.out.println ( user.toString ( ) );
}
}
打印JSON字符串
{“d”:{“result”:[“hello”,“Frank”,“Provost”]}}
打印结果元素
您好
谢
普罗沃斯特
打印POJO:
StagingUser [hi = hello,name = Frank,lastName = Provost]
答案 1 :(得分:2)
以下是json
字符串的解析逻辑:
JsonParser parser = new JsonParser();
JsonElement jsonElement = parser.parse("YOUR_STRING");
JsonObject jsonObj = jsonElement.getAsJsonObject();
JsonObject d = jsonObj.get("d").getAsJsonObject();
JsonArray result = d.get("result").getAsJsonArray();
Gson gson = new Gson();
for(int x = 0; x < result.size(); x++){
JsonObject userOb = result.get(x).getAsJsonObject();
User userObject = gson.fromJson( userOb , User.class);
}
在这里,User
是你的班级。您需要添加com.google.gson
库以运行代码。
答案 2 :(得分:1)
String jsonString = "{\"d\": {\"result\": [{\"firstname\": \"bob\", \"lastname\":\"boblast\"}, {\"firstname\": \"alice\", \"lastname\": \"alicelast\"}]}}";
JSONObject jsonObject = new JSONObject(jsonString);
System.out.println("JSONOBJECT: "+jsonObject);
JSONObject dObject = jsonObject.getJSONObject("d");
System.out.println("RESULTOBJECT: "+dObject);
JSONArray jsonArray = dObject.getJSONArray("result");
System.out.println("JSONARRAY: "+jsonArray);
您可以按照上面的代码中所述获得结果。
答案 3 :(得分:1)
使用here中的json.jar然后
import org.json.JSONObject;
public class JsonWalker {
public static void main(String[] args) {
new JSONObject("{\"d\":{\"result\" :[1,2,3,4]}}").getJSONObject("d").getJSONArray("result").toList().forEach(x->System.out.println(x));
}
}
答案 4 :(得分:1)
我的建议是不要花费精力去除外部JSON。只需使用众多JSON框架中的一个将其映射到对象模型。然后只需从对象模型中提取所需内容并进一步处理它。