简体   繁体   English

如何将Json数组转换为Java对象数组

[英]How to convert Json Array to Java Array of Objects

I have a json object which has following contents : 我有一个具有以下内容的json对象:

{
   "similarUserScores":[
      {
         "user":"u26",
         "score":0.6199970840986468
      },
      {
         "user":"u37",
         "score":0.5405403752816058
      },
      {
         "user":"u12",
         "score":0.523836143999991
      },
      {
         "user":"u24",
         "score":0.4990480549411648
      }
   ]
}

I need to convert it into java objects. 我需要将其转换为Java对象。 So I created a java class to map this : 所以我创建了一个Java类来映射它:

public class SimilarUserScores {

    private String user;

    private double score;

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

}

So how can I convert the above JSON to a list of java objects? 那么如何将上述JSON转换为Java对象列表?

//Get Recommendations for this user
JsonObject recommendedUserJson  = PredictionIoClientHelper
                                       .getInstance().getRecommendedUser("u"+userId, limit);
if(recommendedUserJson != null) {
    Gson gson = new Gson();
    String jsonString = recommendedUserJson.toString();
    SimilarUserScores[] recommendedUsers= gson.fromJson(jsonString, SimilarUserScores[].class);
}

I tried to use the above snippet however it did not worked. 我尝试使用上面的代码段,但是没有用。

You have to initialize a JSONObject and an ArrayList<SimilarUserScores> . 您必须初始化JSONObjectArrayList<SimilarUserScores>

Then you have to get the JSONArray and iterate over it. 然后,您必须获取JSONArray并对其进行迭代。

For each iteration you set the data into the object and then append it to the output list. 对于每次迭代,您都将数据设置到对象中,然后将其附加到输出列表中。 Here's an example of working code: 这是一个工作代码示例:

import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONObject;

String s = "{\"similarUserScores\":[{\"user\":\"u26\",\"score\":0.6199970840986468}, ...

ArrayList<SimilarUserScores> objects = new ArrayList();
JSONObject obj = new JSONObject(s);
JSONArray scores = obj.getJSONArray("similarUserScores");
for (int i = 0; i < scores.length(); i++) {
    JSONObject element = scores.getJSONObject(i);
    SimilarUserScores object = new SimilarUserScores();
    object.setUser(element.getString("user"));
    object.setScore(element.getDouble("score"));
    objects.add(object);
}

The previous code assumes that the JSON is in a String variable and that you have already defined SimilarUserScores class. 前面的代码假定JSON在String变量中,并且您已经定义了SimilarUserScores类。 This code uses "JSON" library. 此代码使用“ JSON”库。 If you are using maven, you can import it adding the following snippet in your pom.xml under the tag <dependencies> 如果您使用的是maven,则可以导入它,并在pom.xml中的标签<dependencies>下添加以下代码段

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
</dependency>

You need an wrapper around your SimilarUserScores . 您需要在SimilarUserScores周围包装一个包装。

Honestly, your inner class should be better named UserScore 老实说,您的内部类应该更好地命名为UserScore

public class SimilarUserScores {
    private List<UserScore> similarUserScores;
    // Getter setter
}

public class UserScore {

    private String user;

    private double score;
}

Now parse your json against SimilarUserScores class 现在,针对SimilarUserScores类解析json

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM