gpt4 book ai didi

javascript - 将 json 键映射到 javascript 对象

转载 作者:行者123 更新时间:2023-11-30 19:13:58 24 4
gpt4 key购买 nike

我需要将一个 json 文件解析为一个 javascript 对象。我使用的 GCC(闭包编译器)可能会破坏我的对象名称,因此在导入或导出 json 文件时我需要将 json 键作为字符串引用。

即导入:

var jsonobj = JSON.parse(json_object_text);
myobj.member1 = jsonobj['Key 1'];
myobj.member2 = jsonobj['Key 2'];

和导出:

jsonobj['Key 1'] = myobj.member1;
jsonobj['Key 2'] = myobj.member2;
var json_object_text = JSON.stringify(jsonobj);

但是这样做很乏味。我只想将键定义为文本字符串一次。

所以我尝试定义一个常量对象,它是一种从 javascript 对象到 json 模式的映射。

// Schema definition for import/export of confc.json.
/** @const */ var dbs = {
$schema: '$schema',
$seq: '$seq',
channel: {
key: 'chan',
id: 'id',
name: 'txt',
value: 'val'
}
}

但后来我仍然不得不做一个繁琐的导入/导出功能:

    export_db: function (db) {
return db && {
[dbs.$schema]: db.$schema,
[dbs.$seq]: db.$seq,
[dbs.channel.key]: db.channel.map(function (e, i) {
var s = dbs.channel; // schema object
return {
[s.id]: util.toInt(e.id),
[s.name]: e.name,
[s.value]: e.value
};
}),
    import_db: function (js) {
js = js || {};
// wrapper for .map() function which works if array is undefined.
function dbmap(arr_in, func) {
arr_in = arr_in || [];
return arr_in.map(func);
}
return {
$schema: js[dbs.$schema],
$seq: js[dbs.$seq],
channel: dbmap(js[dbs.channel.key], function (e, i) {
var s = dbs.channel;
return {
id: e[s.id],
name: e[s.name],
value: e[s.value]
};
}),

这似乎工作正常,但有人可以告诉我一个更简洁的方法吗?

我想使用示例中的对象原型(prototype)/构造函数 given here .但是我没有看到任何考虑到 GCC 可能如何破坏对象成员名称的示例。我还有嵌套对象(没有函数,只有文本和数字)。

最佳答案

如果数据源是外部的,或者如果你需要在外部共享数据,Closure 通过 externs 支持的方式和 @export annotations . User contributed externs是示例的重要来源。

它可能看起来像这样,具体取决于您的环境;

//externs/config.js

/**
* @typedef {{
* foo: (string|undefined),
* [...]
* }}
*/
Bar.Config;

/**
* @typedef {{
* bar: (string|undefined),
* [...]
* }}
*/
Bar.Output;

//main.js

/**
* @param {Bar.Config} config
* @return {Bar.Output}
*/
const bar = function(config) {
// [...]
return output;
};

关于javascript - 将 json 键映射到 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58192021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com