Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在json中解析arraylist_Java_Json_Parsing_Arraylist - Fatal编程技术网

Java 在json中解析arraylist

Java 在json中解析arraylist,java,json,parsing,arraylist,Java,Json,Parsing,Arraylist,我想用Gson解析这个JSON文件: [ { "id": "1", "anneeMois": "201611", "dateModification": "2016-04-18", "montantValide": "500.00", "nbJustificatifs": "3", "visitorId": "1", "etat": { "id": "1", "libEtat": "Saisie clôturée

我想用Gson解析这个JSON文件:

[
  {
    "id": "1",
    "anneeMois": "201611",
    "dateModification": "2016-04-18",
    "montantValide": "500.00",
    "nbJustificatifs": "3",
    "visitorId": "1",
    "etat": {
      "id": "1",
      "libEtat": "Saisie clôturée"
    }
  },
  {
    "id": "8",
    "anneeMois": "201617",
    "dateModification": "2016-08-16",
    "montantValide": "650.00",
    "nbJustificatifs": "7",
    "visitorId": "1",
    "etat": {
      "id": "1",
      "libEtat": "Saisie clôturée"
    }
  },
  {
    "id": "2",
    "anneeMois": "201610",
    "dateModification": "2016-03-19",
    "montantValide": "300.00",
    "nbJustificatifs": "2",
    "visitorId": "1",
    "etat": {
      "id": "2",
      "libEtat": "Fiche créée, saisie en cours"
    }
  }
]
我的课程是:

public class FicheFrais implements  java.io.Serializable 
{
    private int id;
    private String anneeMois;
    private Date dateModification;
    private float montantValide;
    private int nbJustificatifs;
    private int visitorId;

   @SerializedName("etat")
     protected  Etat etat;
.....

public class Etat  implements  java.io.Serializable{

   private  int id_etat;
   private String lib_etat;
...
我的代码是:

public static <T> List<T> toList(String json, Class<T> typeClass)
    {
        List<T> arr =new Gson().fromJson(json, new
         ListParameterizedType<T>   
        (typeClass));
        return arr;
    }

List<FicheFrais> mesFichesFrais = toList(sb.toString(),FicheFrais.class);
我给你我的职责

public class ListParameterizedType<T> implements ParameterizedType
{
    private Class<?> wrapped;

    public ListParameterizedType(Class<T> wrapper)
    {
        this.wrapped = wrapper;
    }

    @Override
    public Type[] getActualTypeArguments()
    {
        return new Type[] { wrapped };
    }

    @Override
    public Type getRawType()
    {
        return List.class;
    }

    @Override
    public Type getOwnerType()
    {
        return null;
    }
}

 When i call my arrayList with this code 

 List<FicheFrais> mesFichesFrais = 
         toList(sb.toString(),FicheFrais.class);
I obtain values in all fields except in my object Etat who is empty
公共类ListParameteredType实现ParameteredType
{
私有类包装;
公共ListParameteredType(类包装器)
{
this.wrapped=包装器;
}
@凌驾
公共类型[]getActualTypeArguments()
{
返回新类型[]{wrapped};
}
@凌驾
公共类型getRawType()
{
返回列表.class;
}
@凌驾
公共类型getOwnerType()
{
返回null;
}
}
当我用这个代码调用我的arrayList时
列表mesFichesFrais=
toList(sb.toString(),FicheFrais.class);
我获取所有字段中的值,但对象Etat中的值为空
您是否有一个序列化示例,如: -使用对象初始化 -使用库Gson -从json到arraylist的流量
谢谢

您的代码似乎正确。只需检查您的json字符串是否正确,检查您的
sb.toString()
中是否包含etat变量。

最后,我使用了一个带有JSONArray的旧解决方案,但没有库Gson
此库使用arraylist

谢谢你的回答

               jsonarray = new JSONArray(sb.toString());
        for(int i=0; i < jsonarray.length(); i++) {
            JSONObject jsonobject = jsonarray.getJSONObject(i);
            FicheFrais uneF = new FicheFrais();
            uneF.setId(Integer.parseInt( jsonobject.getString("id")));
            uneF.setAnneeMois(jsonobject.getString("anneeMois"));
            uneF.setDateModification(Date.valueOf(jsonobject.getString("dateModification")));
            uneF.setMontantValide(Float.parseFloat(jsonobject.getString("montantValide")));
            uneF.setNbJustificatifs(Integer.parseInt(jsonobject.getString("nbJustificatifs")));
            uneF.setVisitorId(Integer.parseInt(jsonobject.getString("visitorId")));
            // On récupère l'état
            JSONObject  unE = jsonobject.getJSONObject("etat");
            Etat unEtat = new Etat ();
            unEtat.setId_etat(unE.getInt("id"));
            unEtat.setLib_etat(unE.getString("libEtat"));
            uneF.setEtat(unEtat);
            mesFichesFrais.add(uneF);
jsonarray=newjsonarray(sb.toString());
for(int i=0;i
你没有问任何问题…问题是什么?你的格式真的很混乱。99%的问题在这里得到了回答可能是重复的否我还没有找到我的问题的解决方案谢谢是的,我的代码似乎是正确的,sb.toString()的开头是[{“id”:“1”,“anneeMois”:“201611”,“dateModification”:“2016-04-18”,“montantValide”:“500.00”,“nbjusticatifs”:“3”,“visitorId”:“1”,“etat”:{“id”:“1”,“libEtat”:“Saisie cl\u00f4tur\u00e9e”},{“id”:“8”,“anneeMois”:“201617”,“dateModification”:“2016-08-16”,“montantValide”:“650.00”,“他已经为我的sb.ToString()…最后,我使用了一个没有库gson的旧解决方案。您是否尝试过使用gson Type=new ListParameterizedType(clazz);List-mesFichesFrais=gson.fromJson(json,Type);
               jsonarray = new JSONArray(sb.toString());
        for(int i=0; i < jsonarray.length(); i++) {
            JSONObject jsonobject = jsonarray.getJSONObject(i);
            FicheFrais uneF = new FicheFrais();
            uneF.setId(Integer.parseInt( jsonobject.getString("id")));
            uneF.setAnneeMois(jsonobject.getString("anneeMois"));
            uneF.setDateModification(Date.valueOf(jsonobject.getString("dateModification")));
            uneF.setMontantValide(Float.parseFloat(jsonobject.getString("montantValide")));
            uneF.setNbJustificatifs(Integer.parseInt(jsonobject.getString("nbJustificatifs")));
            uneF.setVisitorId(Integer.parseInt(jsonobject.getString("visitorId")));
            // On récupère l'état
            JSONObject  unE = jsonobject.getJSONObject("etat");
            Etat unEtat = new Etat ();
            unEtat.setId_etat(unE.getInt("id"));
            unEtat.setLib_etat(unE.getString("libEtat"));
            uneF.setEtat(unEtat);
            mesFichesFrais.add(uneF);