最近做串口开发时通过不同的串口协议控制设备改变状态后需要把各种设备信息上报给后台,调用接口时发现上报给后台的参数转义了,于是通过日志和调试找了半天发现是Json的问题.
{"address":"02","deviceType":"03","friendlyName":"空调","attributes":"{\"applianceId\":\"\",\"fanSpeed\":\"2\",\"friendlyName\":\"\",\"mode\":\"Low\",\"status\":\"on\",\"temperature\":\"16\"}"}
private void initData() {
JSONObject deviceObject = new JSONObject();
try {
deviceObject.put("address", "02");
deviceObject.put("deviceType", "03");
deviceObject.put("friendlyName", "空调");
AttributesBean acAttributesBean = new AttributesBean();
acAttributesBean.setStatus("on");
acAttributesBean.setTemperature("22");
acAttributesBean.setFanSpeed("3");
acAttributesBean.setMode("low");
String attributes = new Gson().toJson(acAttributesBean);
LogUtils.d(TAG,"--构建的设备信息为--" + attributes);
deviceObject.put("attributes",(attributes));
LogUtils.d(TAG,"--转义前的设备信息为--" + deviceObject);
List<String> list = new ArrayList<>();
list.add(JsonUtils.Companion.getReplace(deviceObject.toString()));
LogUtils.d(TAG,"--转义后的设备上报数组为--"+ list);
deviceObject.put("devices", list);
LogUtils.d(TAG,"--设备上报信息为--" + list);
JSONArray jsonArray = new JSONArray();
jsonArray.put(deviceObject);
LogUtils.d(TAG,"--转义前的设备上报信息json数组为--" + jsonArray);
LogUtils.d(TAG,"--转义后的设备上报信息json数组为--" + (jsonArray.toString()));
} catch (JSONException e) {
e.printStackTrace();
}
}
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ main, com.example.escapechardemo.MainActivity.initData(MainActivity.java:45)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ args[0] = MainActivityLog
│ args[1] = --构建的设备信息为--{"applianceId":"","fanSpeed":"2","friendlyName":"","mode":"Low","status":"on","temperature":"16"}
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ main, com.example.escapechardemo.MainActivity.initData(MainActivity.java:47)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ args[0] = MainActivityLog
│ args[1] = --转义前的设备信息为--{"address":"02","deviceType":"03","friendlyName":"空调","attributes":"{\"applianceId\":\"\",\"fanSpeed\":\"2\",\"friendlyName\":\"\",\"mode\":\"Low\",\"status\":\"on\",\"temperature\":\"16\"}"}
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ main, com.example.escapechardemo.MainActivity.initData(MainActivity.java:50)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ args[0] = MainActivityLog
│ args[1] = --转义后的设备上报数组为--[{"address":"02","deviceType":"03","friendlyName":"空调","attributes":"{"applianceId":"","fanSpeed":"2","friendlyName":"","mode":"Low","status":"on","temperature":"16"}"}]
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ main, com.example.escapechardemo.MainActivity.initData(MainActivity.java:52)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ args[0] = MainActivityLog
│ args[1] = --设备上报信息为--[{"address":"02","deviceType":"03","friendlyName":"空调","attributes":"{"applianceId":"","fanSpeed":"2","friendlyName":"","mode":"Low","status":"on","temperature":"16"}"}]
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ main, com.example.escapechardemo.MainActivity.initData(MainActivity.java:55)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ args[0] = MainActivityLog
│ args[1] = --转义前的设备上报信息json数组为--[{"address":"02","deviceType":"03","friendlyName":"空调","attributes":"{\"applianceId\":\"\",\"fanSpeed\":\"2\",\"friendlyName\":\"\",\"mode\":\"Low\",\"status\":\"on\",\"temperature\":\"16\"}"}]
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ main, com.example.escapechardemo.MainActivity.initData(MainActivity.java:56)
├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
│ args[0] = MainActivityLog
│ args[1] = --转义后的设备上报信息json数组为--[{"address":"02","deviceType":"03","friendlyName":"空调","attributes":"{"applianceId":"","fanSpeed":"2","friendlyName":"","mode":"Low","status":"on","temperature":"16"}"}]
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────
/**
*@author: njb
*@date: 2023/4/15 22:36
*@desc:
*/
data class AttributesBean(
var friendlyName: String? = "",
var fanSpeed: String? = "",
var status: String = "",
var applianceId: String = "",
var mode: String = "",
var temperature: String? = ""
): Serializable
/**
*@author: njb
*@date: 2023/4/15 23:01
*@desc:解决Json字符串转义的工具类
*/
class JsonUtils {
companion object {
open fun getReplace(str: String): String {
return str.replace("\\\\".toRegex(), "")
}
}
}
package com.example.escapechardemo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.blankj.utilcode.util.LogUtils;
import com.example.escapechardemo.bean.AttributesBean;
import com.example.escapechardemo.utils.JsonUtils;
import com.google.gson.Gson;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivityLog";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
}
private void initData() {
JSONObject deviceObject = new JSONObject();
try {
deviceObject.put("address", "02");
deviceObject.put("deviceType", "03");
deviceObject.put("friendlyName", "空调");
AttributesBean acAttributesBean = new AttributesBean();
acAttributesBean.setStatus("on");
acAttributesBean.setTemperature("22");
acAttributesBean.setFanSpeed("3");
acAttributesBean.setMode("low");
String attributes = new Gson().toJson(acAttributesBean);
LogUtils.d(TAG,"--构建的设备信息为--" + attributes);
deviceObject.put("attributes",(attributes));
LogUtils.d(TAG,"--转义前的设备信息为--" + deviceObject);
List<String> list = new ArrayList<>();
list.add(JsonUtils.Companion.getReplace(deviceObject.toString()));
LogUtils.d(TAG,"--转义后的设备上报数组为--"+ list);
deviceObject.put("devices", list);
LogUtils.d(TAG,"--设备上报信息为--" + list);
JSONArray jsonArray = new JSONArray();
jsonArray.put(deviceObject);
LogUtils.d(TAG,"--转义前的设备上报信息json数组为--" + jsonArray);
LogUtils.d(TAG,"--转义后的设备上报信息json数组为--" + (jsonArray.toString()));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
https://gitee.com/jackning_admin/es-cape-char-demo
虽然说转义对接口可能影响不是很大,但是终究是个问题,还是要找到问题,想办法解决,不能把问题扔给别人,这样不少一个好习惯,但是终归是解决了,准备休息关机睡觉。。。