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

时间:2018-07-13 12:28:04

标签: java json gson

我有一个具有以下内容的json对象:

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

我需要将其转换为Java对象。所以我创建了一个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;
    }

}

那么如何将上述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);
}

我尝试使用上面的代码段,但是没有用。

2 个答案:

答案 0 :(得分:4)

您必须初始化JSONObjectArrayList<SimilarUserScores>

然后,您必须获取JSONArray并对其进行迭代。

对于每次迭代,您都将数据设置到对象中,然后将其附加到输出列表中。这是一个工作代码示例:

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);
}

先前的代码假定JSON在String变量中,并且您已经定义了SimilarUserScores类。 此代码使用“ JSON”库。如果使用的是maven,则可以导入它,并在pom.xml中的标签<dependencies>下添加以下代码段

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

答案 1 :(得分:1)

您需要在SimilarUserScores周围使用包装纸。

老实说,您的内部类应该更好地命名为UserScore

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

public class UserScore {

    private String user;

    private double score;
}

现在针对SimilarUserScores类解析您的json