Java 无法分析字符串响应
这是我试图解析的响应,并尝试在单独的字符串中获取值Java 无法分析字符串响应,java,android,json,string,parsing,Java,Android,Json,String,Parsing,这是我试图解析的响应,并尝试在单独的字符串中获取值 response = "Data1{ key1='4722**********6', key2='2107', key3=value{ value1='226', value2=passed, value3=tracked, value4=noted }, isChecked=tru
response =
"Data1{
key1='4722**********6',
key2='2107',
key3=value{
value1='226',
value2=passed,
value3=tracked,
value4=noted
},
isChecked=true
}"
但无法解析响应,如
String Datas = "Data1{key1='4722**********6', key2='2107', key3=value{value1='226',
value2=passed,value3=tracked, value4=noted}, isChecked=true}";
String data = Datas.substring(5);
//String data1 = data.replaceAll("\"", "");
try {
JSONObject dataObject = new JSONObject((data)); //JsonObject
String strKey1= dataObject.getString("key1");
String strKey2= dataObject.getString("key2");
String strKey3= dataObject.getString("key3");
JSONObject strValueObj = new JSONObject(strKey3);
String strValue1= strValueObj.getString("value1");
String strValue2= strValueObj.getString("value2");
String strValue3= strValueObj.getString("value3");
String strValue4= strValueObj.getString("value4");
正常的字符串解析有效吗?或者使用JSON解析正确吗?任何人都可以帮助我解析字符串响应。好的,您可以对achive JSON格式进行一些数据转换:
private static final String KEY3 = "key3";
private static final String VALUE = "value";
void extractData() throws JSONException {
String Datas = "Data1{key1='4722**********6', key2='2107', key3=value{value1='226', value2=passed,value3=tracked, value4=noted}, isChecked=true}";
String data = Datas.substring(5);
String dataAsJson = data.replaceAll("=", ":");
if (dataAsJson.indexOf(KEY3) > -1) {
StringBuilder dataBuilder = new StringBuilder(dataAsJson.replaceFirst(VALUE, "{" + VALUE + ":"));
dataBuilder.insert(dataAsJson.indexOf("}", dataAsJson.indexOf(KEY3)) + KEY3.length() - 1, "}");
dataAsJson = dataBuilder.toString();
}
JSONObject dataObject = new JSONObject((dataAsJson));
String strKey1= dataObject.getString("key1");
String strKey3= dataObject.getString("key3");
JSONObject key3Obj = new JSONObject(strKey3);
String value = key3Obj.getString("value");
JSONObject valueObj = new JSONObject(value);
String value1 = valueObj.getString("value1");
}
它可以工作,但肯定不是最优雅的解决方案,如果输入改变了它的结构,那么它可能无法工作
编辑:新输入:
String Datas = "Data1{key1='4722**********6', key2='2107', key3=value{value1='226', value2=passed,value3=tracked, value4=noted}, isMasked=true}";
String data = Datas.substring(5);
String dataAsJson = data.replaceAll("=", ":");
if (dataAsJson.contains(KEY3)) {
StringBuilder dataBuilder = new StringBuilder(dataAsJson.replaceFirst(VALUE, "{" + VALUE + ":"));
dataBuilder.insert(dataAsJson.indexOf("}", dataAsJson.indexOf(KEY3)) + KEY3.length() - 1, "}");
dataAsJson = dataBuilder.toString();
}
JSONObject dataObject = new JSONObject((dataAsJson));
String strKey1 = dataObject.getString("key1");
String strKey3 = dataObject.getString("key3");
JSONObject key3Obj = new JSONObject(strKey3);
String value = key3Obj.getString("value");
JSONObject valueObj = new JSONObject(value);
String value1 = valueObj.getString("value1");
数据字符串不是JSON格式,因为键和值不在双引号中。因此,要解析它,您需要构建自己的解析器,因为它不是有效的JSON字符串。是的,它不是有效的JSON字符串,响应来自硬件,无法更改格式。那么我该如何解析,还有其他解决方案吗?添加您想要将其转换为json的响应,我可以编写一个代码来更改它,它是关于键而不是值的。当然,您可以自己做。代码如下:字符串json=Datas.replaceAll(“=”,“\”:”);这是确切的响应,“Data1{key1='4722*************6',key2='2107',key3=key3{value1='226',value2=passed,value3=tracked,value4=noted},isChecked=true}”“抛出错误org.json.JSONException:字符0处的预期文字值为:'4722***************6',键2:'2107',键3:{value:{value1:'226',value2:passed,value3:tracked,value4:noted},isChecked:true},响应结构将不会更改,一旦解析好了,是否复制我的代码或将其与您的代码混合?”?因为对我来说,你似乎使用了额外的子字符串,它剪切了“{key1=”。工作得很好!。我的错误,在我的行数据中键入了。子字符串(10);谢谢兄弟!如果相同的数据是这样的,我该如何解析,“Data1{key1='4722**********6',key2='2107',key3=值{value1='226',value2=传递,value3=跟踪,value4=注释,isMas ked=true}”;在字符122处抛出异常org.json.JSONException:Unterminated对象。