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对象。