如何从另一个数组中的 JSON 对象中提取值?

Posted

技术标签:

【中文标题】如何从另一个数组中的 JSON 对象中提取值?【英文标题】:How can I pull a value from a JSON object from within another array? 【发布时间】:2021-10-06 03:08:58 【问题描述】:

我的问题标题可能不是描述这个问题的准确方式,但它是我能想到的最好的方式。我会让这变得非常简单——我试图从下面的 JSON 对象中获取 VALUEIWANT 的值。

任何帮助将不胜感激,因为我已经在 w3 学校尝试了 2 小时的各种方法。

我通过硬编码得到的最接近的结果如下:

const x =
   "UserAttributes": 
    [  "Name" : "sub"
      , "Value": "54f5cdfb-6ec7-4683-fdasfasdf-2324234234"
       
    ,  "Name" : "custom:var"
      , "Value": "VALUEIWANT"
       
    ,  "Name" : "email"
      , "Value": "test.user@email.com"
       
    ] 
  , "Username": "testuser"
   

const y = x.UserAttributes[1].Value
    // y here would result in VALUEIWANT

问题是我不确定变量是否总是在索引 1。

为清晰而编辑我的目标是能够在我的控制台中检索“VALUEIWANT”的这个值。我需要能够使用“custom:var”的配对名称来访问该值。我不确定这是否可能。

【问题讨论】:

我想在控制台中返回“VALUEIWANT”的值。所以实际值本身。 您想通过关联的“名称”来识别您想要的“值”吗?还是……? 假设该值不是 VALUEIWANT,您将如何确定要选择的 UserAttributes 数组的哪个元素? 是 name==="custom:var" 的那个吗? 我认为他指的是动态查找它,因为索引中会有更多条目。 抱歉解释不好——为了清楚起见,我已经更新了我的帖子。 【参考方案1】:

这个问题是我不确定这个变量是否总是 位于索引 1。

您需要使用findIndex (MDN) 查找索引

const x = 
  "UserAttributes": [
    "Name": "sub",
    "Value": "54f5cdfb-6ec7-4683-fdasfasdf-2324234234"
  , 
    "Name": "email",
    "Value": "test.user@email.com"
  , 
    "Name": "custom:var",
    "Value": "VALUEIWANT"
  ],
  "Username": "testuser"

const index = x.UserAttributes.findIndex(item => item.Name === "custom:var");

const y = x.UserAttributes[index].Value;

console.log(y);

一个辅助函数如下所示

const x = 
  "UserAttributes": [
    "Name": "sub",
    "Value": "54f5cdfb-6ec7-4683-fdasfasdf-2324234234"
  , 
    "Name": "custom:var",
    "Value": "VALUEIWANT"
  , 
    "Name": "email",
    "Value": "test.user@email.com"
  ],
  "Username": "testuser"


function getValue(x, name) 
  const index = x.UserAttributes.findIndex(item => item.Name === name);
  return index === -1 ? null : x.UserAttributes[index].Value;


// get email
console.log(getValue(x, 'email'));

// get custom:var
console.log(getValue(x, 'custom:var'))

【讨论】:

【参考方案2】:

使用 x.UserAttributes 数组上的Array.find 搜索名称为“custom:var”的项目,并取值:

const valueYouWant = x.UserAttributes.find(ua => ua.Name === "custom:var").Value;

【讨论】:

以上是关于如何从另一个数组中的 JSON 对象中提取值?的主要内容,如果未能解决你的问题,请参考以下文章

jmeter中用json提取器提取响应数据中的多个值

从 MySQL JSON 列中提取 JSON 对象的值作为数组

如何从PostgreSQL json中提取数组

从数据中提取 JSON 数组

如何在没有 Jmeter 中的 foreach 控制器的情况下从数组中提取值(通过 JSON 提取器获得)

如何从数组中的对象的某些键中提取值