HarmonyOS 鸿蒙Next Json字符串转list

发布于 1周前 作者 phonegap100 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Json字符串转list

请问类似于这样的JSON字符串如何直接转成list

“Languange”: [{

        “index”: 1,

        “desc”: “中文”,

        “name”: “你好”

    }, {

        “index”: 2,

        “desc”: “英文”,

        “name”: “hello”

}]

}

7 回复

如果嫌弃麻烦,可以不构建实体类直接使用

let jsonStr: string = `
{"Languange": [{
        "index": 1,
        "desc": "中文",
        "name": "你好"
    }, {
        "index": 2,
        "desc": "英文",
        "name": "hello"
}]
}
`

@Entry
@Component
struct Page34 {
  build() {
    Column() {
      Button('测试').onClick(() => {
        console.info(`mLanguangeData.Languange[0].name:${JSON.parse(jsonStr)['Languange'][0]['name']}`)
        console.info(`mLanguangeData.Languange[0].name:${JSON.parse(jsonStr)['Languange'][1]['desc']}`)

        let list: Object[] = JSON.parse(jsonStr)['Languange']
        console.info(`mLanguangeData.Languange:${JSON.stringify(list)}`)
        for (let i = 0; i < list.length; i++) {
          console.info(`mLanguangeData.item_${i}:${JSON.stringify(list[i])}`)
        }
      })
    }
    .height('100%')
    .width('100%')
  }
}

打印

mLanguangeData.Languange[0].name:你好
mLanguangeData.Languange[0].name:英文
mLanguangeData.Languange:[{"index":1,"desc":"中文","name":"你好"},{"index":2,"desc":"英文","name":"hello"}]
mLanguangeData.item_0:{"index":1,"desc":"中文","name":"你好"}
mLanguangeData.item_1:{"index":2,"desc":"英文","name":"hello"}

但是我不建议你这样做,同样是使用javascript,在h5端如果数据处理不好,顶多就是显示不出来,但是在app端会直接闪退。

分析参考:https://developer.huawei.com/consumer/cn/blog/topic/03155225705890022

let jsonStr:string = `
{"Languange": [{
        "index": 1,
        "desc": "中文",
        "name": "你好"
    }, {
        "index": 2,
        "desc": "英文",
        "name": "hello"
}]
}
`
class LanguangeData{
  Languange:LanguangeItem[] =  []
}
class LanguangeItem{
  index:number = 0
  desc:string  =""
  name:string = ""
}
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Page08 {
  build() {
    Column() {
     Button('测试').onClick(()=>{
       let mLanguangeData :LanguangeData = JSON.parse(jsonStr)
       console.info(`mLanguangeData.Languange[0].name:${mLanguangeData.Languange[0].name}`)
       console.info(`mLanguangeData.Languange[1].desc:${mLanguangeData.Languange[1].desc}`)
     })
    }
    .height('100%')
    .width('100%')
  }
}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

打印

mLanguangeData.Languange[0].name:你好
mLanguangeData.Languange[1].desc:英文<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

感谢您的回答,这样可以拿的到,但是每次拿类似这样的数据都会先创建两个实体类,创建第二层还好,第一层就一个属性、正常情况实体类也不应该写在page上,不方便其他页面调用。类似于这样的接口如果多了,实体类也就会变得很多。有没有类似于java直接转List的方法:像这样 Type type = new TypeToken<List<LanguangeItem>>(){}.getType(); Gson gson=new Gson(); List<LanguangeItem> LanguangeItems=gson.fromJson(json.optString(“currency”),type);

请问找到实现的方法了吗?我也有这样的需求

按照格式定义好 interface 不就可以吗

在HarmonyOS鸿蒙Next中,将JSON字符串转换为List通常涉及使用JSON解析库。鸿蒙系统提供了相应的API来处理JSON数据。以下是一个简要的示例,展示如何将JSON字符串转换为List:

  1. 引入必要的库:确保你的项目中已经包含了JSON解析的库,鸿蒙SDK通常包含org.json或类似的库。

  2. 编写解析代码

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    public class JsonToListExample {
        public static void main(String[] args) {
            String jsonString = "[{\"name\":\"John\"}, {\"name\":\"Doe\"}]";
            try {
                JSONArray jsonArray = new JSONArray(jsonString);
                int length = jsonArray.length();
                for (int i = 0; i < length; i++) {
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    String name = jsonObject.getString("name");
                    System.out.println(name);
                    // 可以将解析的数据添加到List中
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
    

    上述代码示例展示了如何将JSON字符串解析为JSONArray,并遍历数组中的每个JSONObject。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部