从特定 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 字段