【问题标题】:Android sensor data converte to jsonAndroid 传感器数据转换为 json
【发布时间】:2020-05-25 04:22:20
【问题描述】:

我想要的json数据类型是

{"Sensor":[{"sensorName":"gyro","gyroX":-0.0026132816,"gyroY":0.0076529197,"gyroZ":-5.3145277E-4,"pitch":0.0015855022,"roll":0.0012841108,"yaw":-2.6810385E-4}],
"Sensor":[{"acceleration":"acceleration","accX":0.09337672,"accY":0.08858817,"accZ":9.783007,"angleXZ":0.54685944,"angleYZ":0.51881695}] , 
"Sensor":[{"magneticSensor":"magneticSensor","magX":164.58,"magY":-23.039999,"magZ":-160.62}]
}

但是

{"Sensor":[{"sensorName":"gyro","gyroX":-0.0026132816,"gyroY":0.0076529197,"gyroZ":-5.3145277E-4,"pitch":0.0015855022,"roll":0.0012841108,"yaw":-2.6810385E-4}]}
{"Sensor[{"acceleration":"acceleration","accX":0.09337672,"accY":0.08858817,"accZ":9.783007,"angleXZ":0.54685944,"angleYZ":0.51881695}]}
{"Sensor":[{"magneticSensor":"magneticSensor","magX":164.58,"magY":-23.039999,"magZ":-160.62}]}

我想知道如何得到我想要的数据格式

这是我的代码

fun jsonConverte(i : Array<Float> ,sensorName : String ) {
        var obj: JSONObject = JSONObject()
        var jArray: JSONArray = JSONArray()
        var sObject : JSONObject = JSONObject()

        try {
            if(sensorName.equals("gyro")){
                sObject.put("sensorName" , sensorName)
                sObject.put("gyroX" , i.get(0))
                sObject.put("gyroY" , i.get(1))
                sObject.put("gyroZ" , i.get(2))
                sObject.put("pitch" , i.get(3))
                sObject.put("roll" , i.get(4))
                sObject.put("yaw" , i.get(5))
                jArray.put(sObject)
            }else if (sensorName.equals("acceleration")){
                sObject.put("sensorName" , sensorName)
                sObject.put("accX" , i.get(0))
                sObject.put("accY" , i.get(1))
                sObject.put("accZ" , i.get(2))
                sObject.put("angleXZ" , i.get(3))
                sObject.put("angleYZ" , i.get(4))
                jArray.put(sObject)
            }else {
                sObject.put("sensorName" , sensorName)
                sObject.put("magX" , i.get(0))
                sObject.put("magY" , i.get(1))
                sObject.put("magZ" , i.get(2))
                jArray.put(sObject)
            }
            obj.put("Sensor" , jArray) // jArray 를 json 으로
            Timber.d("Test Checked is obj $obj")
        } catch (e: JSONException) {
            e.printStackTrace()
        }
    }

这样,我们要获取传感器数据,并将其转换为json并保存在文本中 能给我一点建议吗?

【问题讨论】:

    标签: android arrays json kotlin


    【解决方案1】:

    格式化 JSON 数据的更好方法是让它看起来像这样:

    {"sensors":[{"sensorName":"gyro","gyroX":-0.0026132816,"gyroY":0.0076529197,"gyroZ":-5.3145277E-4,"pitch":0.0015855022,"roll":0.0012841108,"yaw":-2.6810385E-4},{...},{...}]}
    

    这样,访问起来会更容易,冗余也会更少。但是,如果由于某种原因,您确实需要像您提到的那样存储您的 json,那么,您应该在外部初始化它并使用函数修改它,而不是在函数内部初始化您的 obj。像下面这样:

    fun jsonConverte(i: Array<Float>, sensorName: String, obj: JSONObject) {
            var jArray: JSONArray = JSONArray()
            var sObject : JSONObject = JSONObject()
    
            try {
                if(sensorName.equals("gyro")){
                    sObject.put("sensorName" , sensorName)
                    sObject.put("gyroX" , i.get(0))
                    sObject.put("gyroY" , i.get(1))
                    sObject.put("gyroZ" , i.get(2))
                    sObject.put("pitch" , i.get(3))
                    sObject.put("roll" , i.get(4))
                    sObject.put("yaw" , i.get(5))
                    jArray.put(sObject)
                }else if (sensorName.equals("acceleration")){
                    sObject.put("sensorName" , sensorName)
                    sObject.put("accX" , i.get(0))
                    sObject.put("accY" , i.get(1))
                    sObject.put("accZ" , i.get(2))
                    sObject.put("angleXZ" , i.get(3))
                    sObject.put("angleYZ" , i.get(4))
                    jArray.put(sObject)
                }else {
                    sObject.put("sensorName" , sensorName)
                    sObject.put("magX" , i.get(0))
                    sObject.put("magY" , i.get(1))
                    sObject.put("magZ" , i.get(2))
                    jArray.put(sObject)
                }
                obj.put("Sensor" , jArray)
    }
    
    

    这样,您的对象 (obj) 将在您每次调用函数 jsonConverte 时使用新数据更新,并将您的 json 对象作为参数。这应该会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-28
      • 2018-11-14
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多