原生js如何获取json字符串中某个对象的内容

新手上路,请多包涵

有如下json字符串:

const str = `{
      input: {
        label: "输入框input",
        name: "input",
        option: {
          rules: [{ required: true, message: "Please select your country!" }]
        },
        on: {
          change: e => {
            const { value } = e.target;
            console.log("change", value);
          }
        }
      },
      number: {
        label: "数字输入框",
        name: "input",
        type: "number",
        props: {
          min: 3,
          max: 500
        },
        option: {
          rules: [{ required: true, message: "Please select your country!" }]
        },
        on: {
          change: value => {
            console.log("change", value);
          }
        }
      }
    }`;

怎样获取其中对象input或者number为字符串的内容,要得到的结果如下

获取input的结果:

{
        label: "输入框input",
        name: "input",
        option: {
          rules: [{ required: true, message: "Please select your country!" }]
        },
        on: {
          change: e => {
            const { value } = e.target;
            console.log("change", value);
          }
        }
      }

获取number的结果:

{
        label: "数字输入框",
        name: "input",
        type: "number",
        props: {
          min: 3,
          max: 500
        },
        option: {
          rules: [{ required: true, message: "Please select your country!" }]
        },
        on: {
          change: value => {
            console.log("change", value);
          }
        }
      }

原来使用 const json = JSON.parse(str); 转成json;再通过 json.input 获取需要的对象内容;然后通过JSON.stringify(json.input);转回需要的字符串;但这种方法会导致里面的 change为方法的内容获取不到。

阅读 7.6k
3 个回答

这是一段js脚本。eval函数不安全,可以模拟实现类似功能。如下:

function equalEval(str){
   return new Function('return ' + str)();
}
let obj = equalEval(str);
console.log(obj.input);
console.log(obj.number);

这样相对安全一些。

补充一下@夕水的答案:
要加上"use strict";

function equalEval(str){
   return new Function('"use strict"; return (' + str + ')')();
}

你这不是 JSON,你这就是段 JS 脚本。

var obj = eval('(' + str + ')');
console.log(obj.input);
console.log(obj.number);

相当于把字符串当作 JS 脚本执行一遍然后赋值给 obj;如果这段脚本来源不是你确定可信的最好不要再代码里这么写,不安全。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题