Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
如何解析android中具有特殊字符的json对象_Android_Json_Retrofit - Fatal编程技术网

如何解析android中具有特殊字符的json对象

如何解析android中具有特殊字符的json对象,android,json,retrofit,Android,Json,Retrofit,我是android新手,我有下面给出的json结构。如何使用json解析或改型解析它 { "1,abcd":[{ "v_id":"1" }] "2,efgh":[{ "v_id":"2" }] } 试试这个 try { JSONObject jsonObject = new JSONObject("yourresponce");

我是android新手,我有下面给出的json结构。如何使用json解析或改型解析它

{
   "1,abcd":[{
                 "v_id":"1"
               }]
   "2,efgh":[{
                 "v_id":"2"
               }]
}

试试这个

try {
           JSONObject jsonObject = new JSONObject("yourresponce");
           JSONArray jsonarray = jsonObject.getJSONArray("1,abcd");


           for(int i=0;i<jsonarray.length();i++){
               JSONObject jsonObject1 = jsonarray.getJSONObject(i);
               String   v_id  = jsonObject1.getString("v_id");
               Log.d("seelogcat","values   "+v_id);

           }

           JSONArray jsonarray2 = jsonObject.getJSONArray("2,efgh");


           for(int i=0;i<jsonarray2.length();i++){
               JSONObject jsonObject1 = jsonarray2.getJSONObject(i);
               String   v_id  = jsonObject1.getString("v_id");
               Log.d("seelogcat","values   "+v_id);

           }

       }catch (Exception e){

       }
您可以在这里检查您的Json是否有效

要分离密钥:

Iterator<?> keys = response.keys();
while( keys.hasNext() ) {
    String key = (String)keys.next();
    if ( jObject.get(key) instanceof JSONObject ) {
        System.out.println(key); // here you need splint based on (,)
    }
}
Iterator keys=response.keys();
while(keys.hasNext()){
字符串键=(字符串)键。下一步();
if(jObject.get(key)JSONObject实例){
System.out.println(key);//这里需要基于(,)的夹板
}
}
此处缺少逗号(,)。登记入住

使用Gson进行改装可以完成其余工作。响应的POJO如下所示:

public class Example {

@SerializedName("1,abcd")
@Expose
private List<_1Abcd> Abcd = null;
@SerializedName("2,efgh")
@Expose
private List<_2Efgh> Efgh = null;

public List<_1Abcd> get1Abcd() {
return Abcd;
}

public void set1Abcd(List<_1Abcd> Abcd) {
this.Abcd = Abcd;
}

public List<_2Efgh> get2Efgh() {
return Efgh;
}

public void set2Efgh(List<_2Efgh> Efgh) {
this.Efgh = Efgh;
}

}


谷歌的Gson库可以为您提供开箱即用的功能。您尝试过编写哪些代码?请分享它。“1,abcd”中的1是id。是否可以将它们分开并以不同方式使用?您能否解释一下我们如何做到这一点?是否有其他方法可以做到这一点,因为JSonfield的数量很大?这将是非常冗长和混乱的@戈塔曼M@Nbn你想要什么解释清楚我会帮你或者我会给出我的建议我必须从JSONArray获取id和字符串名称,例如从“1,abcd”中,id为1,abcd为字符串值,我必须将字符串值设置为recycler视图。但问题是JSONArray数量庞大且动态,使用上面提到的方法会变得非常冗长和混乱。如果我们有大量json对象怎么办?我们是否必须“@SerializedName(“JSONObject”)”和显示的每个对象?您必须将@SerializedName(“YourJsonFieldName”)与@Expose一起使用,以消除愚蠢的运行时异常。点击几下,进入这个网站获得你的POJO。如果我的答案有帮助,请投票。如果你觉得这是一个解决方案,那么接受它作为一个解决方案。快乐编码:-)我们如何处理动态JsonField?如果json中添加了JsonField,我们是否必须序列化新的JsonField,或者是否有其他方法可以这样做?将所有可能的JsonField添加到POJO中。如果某个值返回null gson,则改型会自动处理该值。序列化和反序列化由gson自动完成。
{
    "1,abcd": [{
        "v_id": "1"
    }],
    "2,efgh": [{
        "v_id": "2"
    }]
}
public class Example {

@SerializedName("1,abcd")
@Expose
private List<_1Abcd> Abcd = null;
@SerializedName("2,efgh")
@Expose
private List<_2Efgh> Efgh = null;

public List<_1Abcd> get1Abcd() {
return Abcd;
}

public void set1Abcd(List<_1Abcd> Abcd) {
this.Abcd = Abcd;
}

public List<_2Efgh> get2Efgh() {
return Efgh;
}

public void set2Efgh(List<_2Efgh> Efgh) {
this.Efgh = Efgh;
}

}
public class _1Abcd {

@SerializedName("v_id")
@Expose
private String vId;

public String getVId() {
return vId;
}

public void setVId(String vId) {
this.vId = vId;
}

}
public class _2Efgh {

@SerializedName("v_id")
@Expose
private String vId;

public String getVId() {
return vId;
}

public void setVId(String vId) {
this.vId = vId;
}

}