有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法分析字符串响应

这是我试图解析的响应,并试图在单独的字符串中获取值

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解析是正确的?有人能帮我解析字符串响应吗


共 (1) 个答案

  1. # 1 楼答案

    您可以对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");