从特定 JSON 字段中提取数据,将其用作变量,并更新字段值?

Posted

技术标签:

【中文标题】从特定 JSON 字段中提取数据,将其用作变量,并更新字段值?【英文标题】:Extract data from specific JSON field, use it as variable, and update the field value? 【发布时间】:2018-06-14 11:07:20 【问题描述】:

我需要将原点值更改为 lat/lang 坐标(来自另一个 geoJson 文件)而不是国家名称:

index = [
  
    "Name": "Aish Merahrah",
    "Origin": "Egypt",
    "Description": "Made with fenugreek seeds and maize; dough allowed to 
ferment overnight, then flattened and baked."
  ,
  
    "Name": "Ajdov Kruh",
    "Origin": "Slovenia",
    "Description": "Made with buckwheat flour and potato."
  
]

所以结果会是这样的:

  
    "Name": "Ajdov Kruh",
    "Origin": "46.151241, 14.995463",
    "Description": "Made with buckwheat flour and potato."
  

我不确定工作流程,我是否需要提取 JSON 值变量并以某种方式使用该变量来获取 lat & lang 数据?顺便说一句,我需要只使用 JS/JQuery 和 Node。

【问题讨论】:

lat/lang 来自哪里? 你是问如何提取lat/lOng,或者如何修改index的内容? @ScottHunter 修改index的内容(通过将origin value改为lat/lang)取决于它原来的国名。 你是如何获得 lat/lang 的值的?你怎么知道价值是针对斯洛文尼亚而不是其他地方?连接在哪里? @NikhilAggarwal json 数组类似于"Slovenia": "46.151241, 14.995463", "Egypt": "26.820553, 30.802498" 所以是的,字段名称是连接的。 【参考方案1】:

使用Array.forEach

let index = ["Name":"Aish Merahrah","Origin":"Egypt","Description":"Made with fenugreek seeds and maize; dough allowed to ferment overnight, then flattened and baked.","Name":"Ajdov Kruh","Origin":"Slovenia","Description":"Made with buckwheat flour and potato."];
let lat = "Slovenia": "46.151241, 14.995463", "Egypt": "26.820553, 30.802498";
index.forEach(o => o.Origin = lat[o.Origin] ?  lat[o.Origin] :  o.Origin); 
console.log(index);

【讨论】:

【参考方案2】:

假设您的 geoJson 具有以下结构(国家名称为键,纬度/经度为值):

geolocation = "Slovenia": "46.151241, 14.995463", "Egypt": "1, 1"

您可以使用Array.prototype.map 迭代index 并将每个对象的Origin 替换为geolcoation 中的值。

index = [
  
    "Name": "Aish Merahrah",
    "Origin": "Egypt",
    "Description": "Made with fenugreek seeds and maize; dough allowed to ferment overnight, then flattened and baked."
  ,
  
    "Name": "Ajdov Kruh",
    "Origin": "Slovenia",
    "Description": "Made with buckwheat flour and potato."
  
]
geolocation = "Slovenia": "46.151241, 14.995463", "Egypt": "1, 1";
result = index.map(function(obj)  obj['Origin'] = geolocation[obj['Origin']]; return obj ); 
console.log(result);

您甚至可以使用forEach 在上面进行迭代,它仍然会更改index,因为更改是在引用对象中完成的。

【讨论】:

Thx :) 有什么办法可以使用文件路径而不是数组?喜欢index = './index.json' 或排序? 取决于,index.js 文件必须使用 module.exports 导出该结构中的数组;只有只有这样你才能做到index = require('./index.js') 对不起,我的意思是index.json,它的工作方式是一样的吗? 我的意思是json*** 尝试搜索它,***.com/a/10011078/1376448 之类的答案会有所帮助。这超出了这个问题的范围【参考方案3】:

只需遍历对象索引,然后使用您的值编辑值。

假设给定的 JSON 数据:


// Creates an Object
let index = [
  
    "Name": "Aish Merahrah",
    "Origin": "Egypt",
    "Description": "Made with fenugreek seeds and maize; dough allowed to ferment overnight, then flattened and baked."
  ,
  
    "Name": "Ajdov Kruh",
    "Origin": "Slovenia",
    "Description": "Made with buckwheat flour and potato."
  
]

console.log(`Original Origin 1: $index[0].Origin\nOriginal Origin 2: $index[1].Origin`);

// Iterate over indices
for(let i=0;i<index.length;i++) 
  // Edit the value
  index[i].Origin = "1234/1234"


/*
// Using forEach
index.forEach((elem) => 
  elem.Origin = "Your Value";
);
*/

console.log(`Edited Origin 1: $index[0].Origin\nEdited Origin 2: $index[1].Origin`);

【讨论】:

以上是关于从特定 JSON 字段中提取数据,将其用作变量,并更新字段值?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 从 Twitter 流 API 中提取特定的 JSON 字段

使用 XSLT 从 JSON 输出中提取特定字段

如何通过使用 node.js 从实时 json 数据中提取特定字段来创建新的单个 json 对象

使用 jq 从 JSON 输出中提取特定字段

从Python中的json文件中的特定字段中提取文本

如何从 python 中的字段中提取特定数据以打印它?