【问题标题】:java json string to arraylist of objectsjava json字符串到对象的arraylist
【发布时间】:2014-11-20 15:42:53
【问题描述】:

我有 Json String ,看起来像这样

String RET=[{"id":"1","name":"koukouvagia","category":"c","lat":"35.52563370000000","lon":"24.05584680000000","address":"Alexi Minoti","phone":"2821027449","counter":"0"},{"id":"2","name":"theatro","category":"c","lat":"35.51392000000000","lon":"24.01979000000000","address":"Plateia Agoras 69","phone":"2821008500","counter":"0"},{"id":"3","name":"mikro kafe","category":"c","lat":"35.51700560000000","lon":"24.02495420000000","address":"Akth Miaouli 6","phone":"2821059321","counter":"0"},{"id":"4","name":"mikro efeteio","category":"c","lat":"35.51033020000000","lon":"24.03102900000000","address":"Plateia Dikastirion","phone":"2821028112","counter":"0"},{"id":"5","name":"Grhgorhs","category":"c","lat":"35.51355300000000","lon":"24.02024900000000","address":"N.Plasthra \u0026 S.Venizelou","phone":"0","counter":"0"}]

并希望将此 Json 字符串转换为 Objects 的数组列表并将所有元素放在一个类(Data Object.class)上并打印元素。

    Type listOfTestObject=new TypeToken<List<DataObject>>(){}.getType();
    List<DataObject> list2 = g.fromJson(RET, listOfTestObject);

     for(int i = 0; i < list2.size(); i++) {
            System.out.println(list2.get(i).getNameF());
        }

输出是:

null
null
null
null
null

我创建的类具有这种形式

public class DataObject {
  String idF;
  String nameF;
  String categoryF;
  String latF;
  String lonF;
  String addressF;
  String phoneF;
  String counterF;


public String getIdF() {
    return idF;
}
public void setIdF(String idF) {
    this.idF = idF;
}
public String getNameF() {
    return nameF;
}
public void setNameF(String nameF) {
    this.nameF = nameF;}

.
.
.

}

我做错了什么?

【问题讨论】:

  • 为什么您希望将名为 nameF 的字段映射到名为 name 的 JSON 名称?
  • 所以如果我将 nameF 更改为 name 它会起作用吗?
  • 命名约定很重要。
  • 非常感谢 Sotiri!现在可以正常使用了。

标签: java json arraylist


【解决方案1】:

您所要做的就是为每个字段添加注释:

@SerializedName("id")
String idF;
@SerializedName("name")
String nameF;

【讨论】:

    【解决方案2】:

    List 与 List 的类型相同。对于数组解析,你应该写下一个:

    List<DataObject> list2 = new ArrayList<DataObject>((DataObject[])g.fromJson(RET, DataObject[]));
    
    for(int i = 0; i < list2.size(); i++) {
            System.out.println(list2.get(i).getNameF());
    }
    

    您还应该为解析器解释什么字段连接到什么 JSON 参数。如果你使用 GSON 解析器,你可以写注解。或者对于 jackson,您应该重命名您的 getter 和 setter,正如 cmets 中告诉您的那样。

    注解应该是下一个:

    class DataObject {
      @SerializedName("id")
      String idF;
    }
    

    并在JSON字符串中写在括号中的字段名称

    【讨论】:

    • 你答案的第二部分是正确的。第一个不是。
    • 我已经编辑了我的答案。我做同样的下一个,它的工作原理。希望它会有所帮助。
    • 首先你的语法是错误的。你需要DataObject[].class。其次,完全没有必要。 TypeToken&lt;List&lt;DataObject&gt;&gt; 就好了。
    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多