HarmonyOS 鸿蒙Next:有一个很长的JSON,只需要其中部分内容,如何将其快速转换成类对象?

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

HarmonyOS 鸿蒙Next:有一个很长的JSON,只需要其中部分内容,如何将其快速转换成类对象?

有一个很长的JSON,1000行左右,如下图。我只需要红框中的数据,有什么官方或者第三方API,可以快速将其转换成类对象?如果可以不用手动新建interface或者class最好。

HarmonyOS Next API12

cke_2796.png

8 回复
您好,三方库eftool中有JSONObject.parseObject<T>方法可以将JSON转换为指定对象,容纳后获取其中所需要的数据

这个工具不错,测试了简单的JSON结构,可用。像上述问题中更复杂的还没测试,当然者也可后台的接口设计有关系,后台接口数据设计的就不能太复杂。 感谢解答!!

ohpm install @yunkss/eftool =======贴出测试代码============= import { CacheUtil, JSONArray, JSONObject} from ‘@yunkss/eftool’ import hilog from ‘@ohos.hilog’;

class TestDDD { threeMonthRate?: string; moduleName?: string; productName?: string; marketPatter?: string; labelListJson?: site; } class site { site1?: site1; } class site1 { labelType?: string; labelValue?: string; labelName?: string; labelLocation?: string; }

class User { id: string; name: string;

constructor(id: string, name: string) { this.id = id; this.name = name; } }

class Person { name: string; age: number; isActive: boolean; birthDate: Date; primaryUser: User; userList: User[];

constructor(name: string, age: number, isActive: boolean, birthDate: Date, primaryUser: User, userList: User[]) { this.name = name; this.age = age; this.isActive = isActive; this.birthDate = birthDate; this.primaryUser = primaryUser; this.userList = userList; } }

@Entry @Component struct Index { @State message: string = ‘Test Util’;

aboutToAppear(): void { hilog.info(0xFF00,“AAA”,“aboutToAppear”);

let userList = new Array&lt;User&gt;();
userList.push(new User('2345', '测试用户1'));
userList.push(new User('7844', '测试用户2'));
let person = new Person('测试', 12, true, new Date(), new User("uuid", "打撒吃的是草动次打次"), userList);
let j = JSONObject.toJSONString(person);
hilog.info(0xFF00,"AAA","toJSONString:" + j);

let o = JSONObject.parseObject&lt;Person&gt;(j);
hilog.info(0xFF00,"AAA","Person Age:" + o.userList[0].name);


let str1 = '[{"threeMonthRate":null,"moduleName":"loan","productName":"网E贷","marketPatter":"随借随还,最高20万,利率低至8折起","labelListJson":{"site1":{"labelType":0,"labelValue":"网E贷","labelName":"产品名称:123","labelLocation":true}}},{"threeMonthRate":null,"moduleName":"loan","productName":"烟草贷","marketPatter":"无需抵押,无需担保,当天放款,随借随还","labelListJson":{"site1":{"labelType":12,"labelValue":"烟草贷","labelName":"产品名称","labelLocation":false}}}]';
let array = JSONArray.parseArray&lt;TestDDD&gt;(str1);
array.forEach(item =&gt; {
  this.message += item.labelListJson?.site1?.labelName + " ";
  hilog.info(0xFF00,"AAA","xxx:" + item.productName);
})

}

build() { RelativeContainer() { Text(this.message) .id(‘HelloWorld’) .fontSize(50) .fontWeight(FontWeight.Bold) .alignRules({ center: { anchor: ‘container’, align: VerticalAlign.Center }, middle: { anchor: ‘container’, align: HorizontalAlign.Center } }) } .height(‘100%’) .width(‘100%’) } }

可以使用插件,如果使用vsCode,里面有个"JSON to TS "插件,很简单的。

cke_1353.png

很强大,一键全部转成了TS interface。兄弟再问一下,接下来如何将Json对象和这些TS interface关联起来?通过HTTP GET请求到的data.result就是截图中的内容。

直接用map接受,map去手动获取也可以把
ChatGPT转换

在HarmonyOS鸿蒙Next开发中,处理长JSON并提取部分内容转换为类对象,可以通过以下步骤实现:

  1. 定义数据模型:首先,根据所需JSON部分定义相应的Java或Kotlin类。确保类属性与JSON键名匹配,可使用注解(如@SerializedName)来指定不匹配的情况。

  2. 使用JSON解析库:HarmonyOS提供了丰富的JSON解析库,如Gson或Fastjson。以Gson为例,首先添加Gson依赖到项目中。

  3. 解析JSON:从长JSON字符串中提取所需部分,然后利用Gson的fromJson方法将其解析为定义的类对象。示例代码如下:

    String jsonString = ...; // 长JSON字符串
    String partialJson = extractPartialJson(jsonString); // 提取所需部分
    Gson gson = new Gson();
    MyClass myObject = gson.fromJson(partialJson, MyClass.class);
    

    其中,extractPartialJson方法需自定义,用于从完整JSON中提取所需片段。

  4. 处理结果myObject即为转换后的类对象,可直接使用。

注意,确保JSON格式正确,且提取部分符合类结构。如果处理复杂嵌套JSON,可定义嵌套类或使用泛型。

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

回到顶部