npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

json-class-interface

v1.1.7

Published

将json数据自动转换为class或interface

Downloads

4

Readme

JsonToClassOrInterface

状态

持续开发中...

  • 【完成】~~1: 将开发桌面端软件 和 web网页 进而 方便作为 独立的 工具来使用。~~
  • 【完成】~~2: 增加功能,将生成的 Interface 和 class 自动生成 xxx.ts 文件,并保存到你给的项目路径中,方便开发者将本插件和项目请求进行深度集成~~

基于本插件,自己开发的支持MAC,Linux,Windows 的桌面端项目地址:

https://gitee.com/bmycode/json-class-desktop

前言

顾名思义,这是一个把前端接口的json数据转化为 typescriptInterfaceClass的插件。

当你在用typescript开发项目,你是否烦恼过后端接口给我们一坨json数据的时候,我们需要为数据 手动编写大量InterfaceClass,来为请求中间层的方法标注返回类型,然后才能在页面中使用并获得优雅的类型提示

手动写...很麻烦的,为何不 根据 json 数据自动生成???!!!

受到 flutterjson to dart 启发,进而开发本插件。

注意

本插件只能将json自动生成为 InterfaceClass,避免我们手动编写的繁杂过程,但并不能实现类似 flutter json_serializable 将 json数据和类进行映射(序列化)的功能!!

如果你想实现全套 json_serializable 的功能,可以在调用 toClass 方法的时候将参数 needProperty 开启并设置为true(参数说明看下面)。

这时候将生成 json-mapper-class 插件所需要的 序列化代码


至于为什么需要 json-mapper-class 这个插件,相信开发过flutter的你应该很清楚,不清楚去看官网说的说明:

https://docs.flutter.dev/data-and-backend/serialization/json


如果你需要使用json和类映射,那么要在项目里下载引入本插件才能使用,插件地址:

json-mapper-class


可能你会疑惑甚至一脸懵逼,我知道你很急,但是你先别着急,看说明你思考下就明白了:

插件有两个:

  • json-class-interface
  • json-mapper-class

它们之间的使用关系举例说明如下:

  • 假设 http://www.xxx.com/newsInfo 接口返回了 新闻详情数据
  • 这时我们 使用插件 json-class-interface 将接口返回数据转为 类(needProperty参数需要开启),然后将 插件返回的代码复制保存到 xxx.ts 中。
  • 最后 使用插件 json-mapper-class 将上一步的类和接口json传入,本插件会自动序列化json存储到类中,请求中间层方法返回数据类型和页面上直接 使用 类 即可

当然你也可以把这两个插件和你的项目进行深度的集成,让它们更加自动化,无感,便捷,高效

安装

npm i --save json-class-interface

使用案例

import { toClass, toInterface } from "json-class-interface";

// Json 数据
let json1 = {
  status: 200,
  message: "请求成功",
  result_list: [
    { 
      id: 1, 
      name: "新闻1", 
      tags_arr: [ 
        { 
          tags_id: 1, 
          tags_title: '标签标题1' 
        }, 
        { 
          tags_id: 1, 
          tags_title: '标签标题1' 
        } 
      ] 
    },
    { 
      id: 2, 
      name: "新闻2", 
      tags_arr: [ 
        { 
          tags_id: 1, 
          tags_title: '标签标题2' 
        }, 
        { 
          tags_id: 1, 
          tags_title: '标签标题2' 
        } 
      ] 
    },
  ]
}

// 1 转换为 Class

// JsonToClass: 第一层类的名称,随便自定义
let type: string = toClass("JsonToClass", json1)
console.log(type);

// json转换为class的结果输出:
// export class TagsArr {
//  tags_id!: number;
//  tags_title!: string;
// } 

// export class ResultList {
//  id!: number;
//  name!: string;
//  tags_arr!: TagsArr[];
// } 

// export class JsonToClass {
//  status!: number;
//  message!: string;
//  result_list!: ResultList[];
// } 


// 2 转化为 Interface

let Interface: string = toInterface("JsonToInterface", json1)
console.log(Interface);

// json转换为Interface的结果输出:
// export interface TagsArr {
//  tags_id: number;
//  tags_title: string;
// } 

// export interface ResultList {
//  id: number;
//  name: string;
//  tags_arr: TagsArr[];
// } 

// export interface JsonToInterface {
//  status: number;
//  message: string;
//  result_list: ResultList[];
// } 

方法

json 数据转化为 class

toClass(className: string = "JsonToClass", rawJson: JosnType | string, options: ToClassOptions = {}): string


json 数据转化为 interface,本方法的效果 和 toClass 参数 interfaceModel: true 效果一样。为了方便使用,故提供toInterface方法

toInterface(className: string = "JsonToInterface", rawJson: JosnType | string, options: ToClassOptions = {}): string


方法参数说明:

| 名称 | 类型 | 默认值 | | :-----:| :----: | :----: | | className | string | JsonToClass 或 JsonToInterface | | rawJson | JosnType 或 string | 不为空 | | options | ToClassOptions | {} |

JosnType 类型如下:

export type JosnType = { [key: string]: any };

ToClassOptions 类型如下:

export interface ToClassOptions {
  nullAlias?: string;
  needProperty?: boolean;
  needPropertyValue?: boolean;
  interfaceModel?: boolean
}

| 名称 | 类型 | 默认值 | 说明 | | :----:| :----:|:----:|:----:| | nullAlias | string | "string" | 如果对象值为null,转化为 class 或 interface 时候,给这个对象key个默认类型 | | needProperty | boolean | false | 是否需要生成Property装饰器,用到插件 json-mapper-class 才需要开启 | | needPropertyValue | boolean| false | 是否需要生成Property装饰器的默认值,用到插件 json-mapper-class 才需要开启| | interfaceModel | boolean| false | 是否需要生成 interface 模式 |