Java 当大括号括在引号内时,如何解析json?
如何解析这种jsonJava 当大括号括在引号内时,如何解析json?,java,android,json,gson,Java,Android,Json,Gson,如何解析这种json { "tId": 5439661, "name": "aASD", "inputParameters": { "a": "50", "b": "234324", "c": "wefefew", "d": "T", "e": "4224", "f": "T", "g": "t" }, "outputParameters": { "dId": "{1234435-A333F-A3334-A273-123243252355}"
{
"tId": 5439661,
"name": "aASD",
"inputParameters": {
"a": "50",
"b": "234324",
"c": "wefefew",
"d": "T",
"e": "4224",
"f": "T",
"g": "t"
},
"outputParameters": {
"dId": "{1234435-A333F-A3334-A273-123243252355}",
"fd": "1000023456"
}
}
解析代码:
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(response.body().toString());
} catch (JSONException e) {
e.printStackTrace();
}
我尝试了上面的方法,但出现了以下错误:
org.json.JSONException: Expected ':' after 1234435-A333F-A3334-A273-123243252355
我尝试了POJO和gson库,但仍然没有成功
有人解决过这种问题吗?
我怎样才能得到字符串
已编辑:已发布测试服务器的响应使用此模型:-
在使用Gson之前,请先使用Gson库
dependencies {
implementation 'com.google.code.gson:gson:2.8.2' // Old 2.8.0
}
只要写
String text=response.getStringdId
然后文本将是:{1234-123423-53235423},你可以用这个文本做任何事情
我用这个代码示例解决了您的问题,我的代码工作得很好
public void getjson() {
RequestQueue mQueue;
mQueue = Volley.newRequestQueue(MainActivity.this);
String url = "http://www.mocky.io/v2/5b28ca862f00006300f55e6e";
JsonObjectRequest request = new JsonObjectRequest(com.android.volley.Request.Method.GET, url, null, new com.android.volley.Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Log.d("Response", response.toString());
if(response.length()>0){
String id=response.getString("tId");
String name=response.getString("name");
Log.d("response.getid",id);
Log.d("response.getname",name);
JSONObject inputObject=response.getJSONObject("inputParameters");
if(inputObject.length()>0){
String a=inputObject.getString("a");
String b=inputObject.getString("b");
String c=inputObject.getString("c");
String d=inputObject.getString("d");
String e=inputObject.getString("e");
String f=inputObject.getString("f");
String g=inputObject.getString("g");
}
JSONObject outObject=response.getJSONObject("outputParameters");
if(outObject.length()>0){
String didText=outObject.getString("dId");
String fdText=outObject.getString("fd");
Log.d("response.getstring",didText);
Log.d("response.getstring",fdText);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Error", "Error de response");
error.printStackTrace();
}
});
mQueue.add(request);
}
为什么Json的值是大括号?@Pankaj我从后端api获得它。大括号是我无法解决的问题:如果response.body.toString是{dId:{1234-123423-53235423}},那么它将解析为JSON。如果response.body.toString只是{1234-123423-53235423},那么它不是有效的JSON,显然无法进行解析。必须指定变量类型。例如.body的响应和返回值。我正在使用gson:2.8.2并使用`此模型。我确信这将很好地工作,并让我知道这是否适用于您@sj_8i还更新了模型。您也可以只更新模型,它在sj_8下运行良好
public void getjson() {
RequestQueue mQueue;
mQueue = Volley.newRequestQueue(MainActivity.this);
String url = "http://www.mocky.io/v2/5b28ca862f00006300f55e6e";
JsonObjectRequest request = new JsonObjectRequest(com.android.volley.Request.Method.GET, url, null, new com.android.volley.Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Log.d("Response", response.toString());
if(response.length()>0){
String id=response.getString("tId");
String name=response.getString("name");
Log.d("response.getid",id);
Log.d("response.getname",name);
JSONObject inputObject=response.getJSONObject("inputParameters");
if(inputObject.length()>0){
String a=inputObject.getString("a");
String b=inputObject.getString("b");
String c=inputObject.getString("c");
String d=inputObject.getString("d");
String e=inputObject.getString("e");
String f=inputObject.getString("f");
String g=inputObject.getString("g");
}
JSONObject outObject=response.getJSONObject("outputParameters");
if(outObject.length()>0){
String didText=outObject.getString("dId");
String fdText=outObject.getString("fd");
Log.d("response.getstring",didText);
Log.d("response.getstring",fdText);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Error", "Error de response");
error.printStackTrace();
}
});
mQueue.add(request);
}