账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    antd cascader 中的 json解析
    • 2020-01-01 00:00
    • 11
    59
    0

    问题描述

    antd开发cascader过程中,后台返回给我的json是这样的:

    {"content":[{"id":1,"code":"1001","pid":0,"nameCn":"网关","nameEn":"gateway"},{"id":2,"code":"1002","pid":0,"nameCn":"网桥","nameEn":"bridge"},{"id":3,"code":"1003","pid":0,"nameCn":"终端","nameEn":"terminal"},{"id":4,"code":"1004","pid":3,"nameCn":"耳标","nameEn":"ear tag"},{"id":5,"code":"1005","pid":3,"nameCn":"水位监测终端","nameEn":"water level monitoring terminal"},{"id":6,"code":"1006","pid":3,"nameCn":"电子通风器","nameEn":"electronic ventilator"},{"id":7,"code":"1007","pid":1,"nameCn":"网关","nameEn":"gateway"},{"id":8,"code":"1008","pid":2,"nameCn":"WiFi 网桥","nameEn":"WIFI bridge"}],"status":"OK","errorCode":null,"errorMsg":null}
    

    你期待的结果是什么?实际看到的错误信息又是什么?

    首先根据pid=0筛选出1级类目,然后再根据1级类目的id是否等于其他的pid筛选出2级,value是id,lable是nameCn,最后希望得到的数据格式:

    coptions = [
      {
        value: '1',
        label: '网关',
        children: [
          {
            value: '7',
            label: '网关',
          },
        ],
      },
      {
        value: '2',
        label: '网桥',
        children: [
          {
            value: '8',
            label: 'WIFI 网桥',
          },
        ],
      },
      {
        value: '3',
        label: '终端',
        children: [
          {
            value: '4',
            label: '耳标',
          },
          {
            value: '5',
            label: '水位监测终端',
          },
          {
            value: '6',
            label: '电子通风器',
          },
        ],
      },
    ]
    

    我自己之前用filter筛选出pid>0和小于0的两个数组,后续不知道要怎么写,请教各位,谢谢

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • ミ长发小鹿纯▽\ 普通会员 1楼

      在Antd Cascader中,JSON解析是一个常见的需求,通常用于从JSON数据中提取和展示数据。以下是一个简单的示例,展示如何在Cascader中解析JSON数据:

      首先,你需要在Antd中引入JSON库,例如:

      javascript import * as React from 'antd'; import * as json from 'json';

      然后,你可以在你的Antd组件中使用JSON解析来获取和显示JSON数据:

      ```javascript import React from 'react'; import { Cascader } from 'antd'; import { jsonSerializer } from 'json';

      const App = () => { const [data, setData] = React.useState([ { id: 1, text: 'Option 1', children: [ { id: 1-1, text: 'Option 1-1', children: [ { id: 1-1-1, text: 'Option 1-1-1', children: [ { id: 1-1-1-1, text: 'Option 1-1-1-1', }, ], }, { id: 1-1-2, text: 'Option 1-1-2', children: [ { id: 1-1-2-1, text: 'Option 1-1-2-1', }, ], }, { id: 1-1-3, text: 'Option 1-1-3', children: [ { id: 1-1-3-1, text: 'Option 1-1-3-1', }, ], }, ], }, { id: 2, text: 'Option 2', children: [ { id: 2-1, text: 'Option 2-1', children: [ { id: 2-1-1, text: 'Option 2-1-1', children: [ { id: 2-1-1-1, text: 'Option 2-1-1-1', }, ], }, ], }, { id: 2-2, text: 'Option 2-2', children: [ { id: 2-2-1, text: 'Option 2-2-1', children: [ { id: 2-2-1-1, text: 'Option 2-2-1-1', }, ], }, ], }, { id: 2-3, text: 'Option 2-3', children: [ { id: 2-3-1, text: 'Option 2-3-1', children: [ { id: 2-3-1-1, text: 'Option 2-3-1-1', }, ], }, ], }, ], }, ], }, ]);

      const renderData = (data: any) => { const list = data.map(item => (

      { setData(prevData => prevData.map(item => ({ ...item, id: event.target.value })); }} />
      ));

      return list;
      

      };

      return ( { setData(prevData => prevData.map(item => ({ ...item, id: event.target.value })); }} renderData={renderData} /> ); };

      export default App; ```

      在这个示例中,我们首先定义了一个包含JSON数据的数组data。然后,我们定义了一个名为renderData的函数,该函数接收一个JSON对象作为参数,并将该对象的每个选项转换为一个React元素,然后渲染到Cascader中。最后,我们定义了一个名为Cascader的组件,该组件包含data数组和renderData函数。

      renderData函数中,我们首先使用map函数将JSON对象的每个选项转换为一个React元素,然后使用key属性为每个选项设置一个唯一的id。然后,我们使用Cascadervalue属性将选中的id设置为当前事件的参数,从而更新data数组。

      当用户选择一个选项时,onChange事件会被触发,该事件将JSON对象的选中的id设置为当前事件的参数,从而更新data数组。最后,我们使用renderData函数将data数组转换为React元素,并渲染到Cascader中。

      注意:这个示例假设JSON对象具有一个名为id的字段,表示选中的选项ID。在实际应用中,JSON对象可能包含更多的字段,例如namevalue等,你可能需要根据实际情况修改Cascader的结构和行为。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部