我有一个模型类方法,它返回包含所有注册用户详细信息的对象列表。我想获取all()方法重新生成的列表,并将数据转换为JSON对象,并将其作为字符串传递给视图。如何将此数组列表转换为JSON对象?
我无法通过以下方式执行此操作:
ObjectMapper mapper = new ObjectMapper();
JSONObject json = new JSONObject();
JsonNodeFactory jsonnode = JsonNodeFactory.instance;
ObjectNode result = new ObjectNode(jsonnode);
for (int i = 0; i < list.size(); i++) {
json.put(list.get(i).fname, list.get(i));
System.out.println(json.get("fname"));
}
@Entity
class Mydata extends Model {
@Id
public Long Id;
public String fname;
public String lname;
public String city;
public String state;
/****************** READ/select OPERATION *****************/
public static Finder < Long, Mydata > finder = new Finder(Long.class, Mydata.class);
public static List < Mydata > all() {
return finder.all();
}
public static void createuser(Mydata user) {
user.save();
}
}
答案 0 :(得分:19)
要将ArrayList转换为Json,只需从以下位置下载Open Source json实用程序: 来自http://json.org/java/
的here或Jar文件只是这样做:
JSONArray jsonAraay = new JSONArray(your_array_list);
就是这样
注意:你的POJO / MODEL类中应该有setter / getter来将arraylist转换为json
答案 1 :(得分:1)
不要打扰org.json,一直使用Jackson:
// list is a List<MyData>
final ObjectMapper mapper = new ObjectMapper();
final Map<String, MyData> map = new HashMap<>();
for (final MyData data: list)
map.put(data.fname, data);
final JsonNode json = mapper.valueToTree(map);
答案 2 :(得分:0)
您可以像其他人建议的那样使用各种第三方库,或者只使用Play自己的简化方法(可在play.libs.Json
中找到)与Jackson对象一起使用,但它已集成到框架中需要使用的代码少得多,例如:
JsonNode myJsonNode = Json.toJson(MyListObject);
将List转换为JsonNode对象,然后使用String jsonResult = Json.stringify(myJsonNode);
之类的东西将其转换为字符串表示形式。
如果您在模板中使用JSON,请不要忘记将其包装在@Html(myJsonString)
之类的内容中,这样它就不会逃避任何事情。否则,如果您只是将纯JSON输出到浏览器,则简单的return ok(jsonResult);
将起作用,因为Play将自动设置内容类型。
参考链接:http://www.playframework.com/documentation/api/2.0/java/play/libs/Json.html
答案 3 :(得分:0)
JSONObject.valueToString(<<your list of custom object>> OR <<objects>> OR <<map>>)
工作得很好......如果你感兴趣的话,那个lib上还有其他一些方法......