【问题标题】:Unable to Parse string response无法解析字符串响应
【发布时间】:2021-07-24 04:04:03
【问题描述】:

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

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 解析是否正确?谁能帮我解析字符串响应。

【问题讨论】:

  • 数据字符串不是 JSON 格式,因为键和值不是双引号。因此,要解析它,您需要构建自己的解析器,因为这不是有效的 JSON 字符串。
  • 是的,它不是有效的 JSON 字符串,响应来自硬件,无法更改格式。那我该如何解析,有没有其他的解决方案?
  • 添加您想要将其转换为 json 的确切响应,我可以编写代码来更改它,它是关于键而不是值。你当然可以自己做。代码是这样的:String json = Datas.replaceAll("=", "\":");
  • 这是确切的响应,“Data1{key1='4722**********6', key2='2107', key3=Key3{value1='226', value2=passed,value3=tracked, value4=noted}, isChecked=true}"

标签: java android json string parsing


【解决方案1】:

好吧,你可以做一些数据转换来获得 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");

【讨论】:

  • throws error org.json.JSONException: Expected literal value at character 0 of :'4722**********6', key2:'2107', key3:{value: {value1:'226', value2:passed,value3:tracked, value4:noted}}, isChecked:true},响应结构不会改变,一旦解析就好了
  • 您是否复制了我的代码或将其与您的代码混合在一起?因为对我来说,您似乎使用了额外的子字符串来剪切 "{key1=".
  • 完美运行!。我的错误,我的 Datas.substring(10) 行中的错字;谢谢兄弟!
  • 如果相同的数据是这样的,我该如何解析,"Data1{key1='4722**********6', key2='2107', key3=value{ value1='226', value2=passed,value3=tracked, value4=noted}, isMas}ked=true}";
  • 抛出异常 org.json.JSONException: Unterminated object at character 122.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2020-05-01
相关资源
最近更新 更多