Java 解析传入的JSON并删除包装样板

Java 解析传入的JSON并删除包装样板,java,json,spring,jackson,Java,Json,Spring,Jackson,在我的程序中,我调用了一个api,它返回一个用户列表。然而,结果是这样包装在样板中的 { "d": { "result" : [ ... here the actual lsit ... ] } } 我想解析结果,但我找不到一种简单的方法从传入的json字符串中删除“d”和“result” 我开始为登台用户实体创建自己的类,因为结果集与我的用户实体不完全匹配 class StagingUser { // same props as api response per us

在我的程序中,我调用了一个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;
}
private List parseResult(@RequestBody List staginguers){
返回舞台者;
}

但是,这需要我去掉样板结果

以下是
json
string的解析逻辑:

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);
}
JsonParser=newjsonparser();
JsonElement=parser.parse(“您的_字符串”);
JsonObject jsonObj=jsonElement.getAsJsonObject();
JsonObject d=jsonObj.get(“d”).getAsJsonObject();
JsonArray result=d.get(“result”).getAsJsonArray();
Gson Gson=新的Gson();
对于(int x=0;x

这里,
User
是您的类。您需要添加
com.google.gson
库来运行上述代码。

以下是
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);
}
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);
JsonParser=newjsonparser();
JsonElement=parser.parse(“您的_字符串”);
JsonObject jsonObj=jsonElement.getAsJsonObject();
JsonObject d=jsonObj.get(“d”).getAsJsonObject();
JsonArray result=d.get(“result”).getAsJsonArray();
Gson Gson=新的Gson();
对于(int x=0;x
这里,
User
是您的类。您需要添加
com.google.gson
库来运行上述代码

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);
您可以获得上述代码中描述的结果

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);
  • 首先获取“d”的json对象
  • 获取结果的json对象
  • 获取结果json对象的数组
您可以获得上述代码中描述的结果

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);
  • 首先获取“d”的json对象
  • 获取结果的json对象
  • 获取结果json对象的数组

您可以使用gson库

忽略“D”:

马文: JsonTest: 这是获取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”:{“结果”:[“你好”,“弗兰克”,“教务长”]}

打印结果元素

你好

坦率的

教务长

打印POJO:

StagingUser[hi=你好,name=弗兰克,lastName=教务长]


您可以使用gson库

忽略“D”:

马文: JsonTest: 这是获取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”:{“结果”:[“你好”,“弗兰克”,“教务长”]}

打印结果元素

你好

坦率的

教务长

打印POJO:

StagingUser[hi=你好,name=弗兰克,lastName=教务长]

使用json.jar from,然后

使用json.jar from,然后


我的建议是不要花费精力删除外部JSON。只需使用众多JSON框架中的一个将其映射到对象模型。然后从对象模型中提取所需内容并进一步处理。

我的建议是不要花费精力删除外部JSON。只需使用众多JSON框架中的一个将其映射到对象模型。然后从对象模型中提取您需要的内容并进一步处理。

向我们展示您迄今为止尝试过的内容。此JSON不是有效的“结果[…]”,它应该是“结果”:[…]这只是一个输入错误,但感谢@Thrasher我添加了我的想法,告诉我们您迄今为止尝试过的内容。此JSON不是有效的“结果[…]”,它应该是“结果”:[……]这只是一个输入错误,但谢谢@Thrasher我已经添加了我的想法作为银行,你能添加如何继续结果吗?我将如何以我的类的实际对象结束吗?@FrankProvost:我已经更新了答案。
userObject
将是你的类的实际对象。谢谢,你能添加如何继续结果吗?我将如何以实际对象结束我的类对象?@FrankProvost:我已经更新了答案。
userObject
将是你的类的实际对象。非常感谢!最详细的描述和示例标记为正确谢谢!最详细的描述和示例标记为正确谢谢