【问题标题】:JSON object with muliple key names for a single value. And how do I read that? [closed]具有单个值的多个键名的 JSON 对象。我怎么读? [关闭]
【发布时间】:2021-02-03 09:40:18
【问题描述】:

我遇到了这样一个带有奇怪键的物体。

const obj = {
formValues: {
'TOTAL;_null_;_null_;3;_null_': "100"
'billing;_null_;_null_;1;_null_': "Y"
'billing;_null_;_null_;2;_null_': "Y"
'billing;_null_;_null_;3;_null_': "Y"
}
}

是否可以通过某种方式对其进行解析,以便能够仅使用“TOTAL”关键字来获取“100”值?

obj.formValues['TOTAL'] // gives an error

你有没有看到类似的东西?那么,你能解释一下为什么会这样吗? (这不是我试图使用对象的方式,我只是找到它并试图理解它为什么看起来如此)

【问题讨论】:

  • 请添加一个有效的对象。
  • 这是无效的 json
  • 它应该是obj ["TOTAL;_null_;_null_;3;_null_"](假设您忘记在对象文字中的键周围添加"")但是,它不应该抛出错误。它只会返回 undefeind
  • 您的对象中没有 'TOTAL' 键。有一个键叫'TOTAL;_null_;_null_;3;_null_'
  • 您的基本错误是认为有“多个”键。没有。每个值只有一个键,只是那个键很长。

标签: javascript json object javascript-objects


【解决方案1】:

我遇到了这样一个对象,其中一个字段有多个键名。

对象的属性只有一个键,JavaScript 对象不可能有多个键来表示同一个属性。 (可以将一个属性设为另一个属性的别名,但这是不同的。)

在你说过的评论中:

我试图通过使用单个键来获取该值,是否可以通过某种方式解析它?就我而言,它是 TOTAL 键。

您可以通过查找实际的属性名称,然后使用括号表示法来获取属性值来做到这一点:

const name = Object.keys(obj.formValues).find(name => name.includes("TOTAL"));
if (name) {
    console.log(obj.formValues[name]); // "100"
}

但是,名称中可能有不止一处带有TOTAL 的房产,在这种情况下,您无法确定您会得到哪一处。 (对象属性现在确实有一个顺序,但是对于对象中名称类型的属性,顺序取决于创建属性的顺序,这不是您应该依赖的。)

现场示例:

const obj = {
    formValues: {
        "TOTAL;_null_;_null_;3;_null_": "100",
        "billing;_null_;_null_;1;_null_": "Y",
        "billing;_null_;_null_;2;_null_": "Y",
        "billing;_null_;_null_;3;_null_": "Y"
    }
};
const name = Object.keys(obj.formValues).find(name => name.includes("TOTAL"));
if (name) {
    console.log(obj.formValues[name]); // "100"
}

或者您可以使用Object.entries 同时获取名称和值(但这涉及创建一堆临时数组 [JavaScript 引擎在这方面确实很快]):

const obj = {
    formValues: {
        "TOTAL;_null_;_null_;3;_null_": "100",
        "billing;_null_;_null_;1;_null_": "Y",
        "billing;_null_;_null_;2;_null_": "Y",
        "billing;_null_;_null_;3;_null_": "Y"
    }
};
const property = Object.entries(obj.formValues).find(([name]) => name.includes("TOTAL"));
if (property) {
    const [name, value] = property;
    console.log(`Name is ${name}, value is ${value}`);
}

【讨论】:

    猜你喜欢
    • 2013-12-28
    • 1970-01-01
    • 2022-01-07
    • 2018-08-31
    • 2011-06-06
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多