我使用此代码从Jhonny的Question中的json 对象中找到了所需的部分
数据样本
TestObj = {
"Categories": [{
"Products": [{
"id": "a01",
"name": "Pine",
"description": "Short description of pine."
},
{
"id": "a02",
"name": "Birch",
"description": "Short description of birch."
},
{
"id": "a03",
"name": "Poplar",
"description": "Short description of poplar."
}],
"id": "A",
"title": "Cheap",
"description": "Short description of category A."
},
{
"Product": [{
"id": "b01",
"name": "Maple",
"description": "Short description of maple."
},
{
"id": "b02",
"name": "Oak",
"description": "Short description of oak."
},
{
"id": "b03",
"name": "Bamboo",
"description": "Short description of bamboo."
}],
"id": "B",
"title": "Moderate",
"description": "Short description of category B."
}]
};
查找功能
function getObjects(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getObjects(obj[i], key, val));
} else if (i == key && obj[key] == val) {
objects.push(obj);
}
}
return objects;
}
像这样使用:
getObjects(TestObj, 'id', 'A'); // Returns an array of matching objects
此代码是从源代码中选择匹配的片段。但是我想要的是用新值更新源对象并检索更新的源对象。
我想要类似的东西
getObjects(TestObj, 'id', 'A', 'B'); // Returns source with updated value. (ie id:'A' updated to id:'B' in the returned object)
我的密码
function getObjects(obj, key, val, newVal) {
var newValue = newVal;
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getObjects(obj[i], key, val));
} else if (i == key && obj[key] == val) {
obj[key] = 'qwe';
}
}
return obj;
}
如果我给定obj[key] = 'qwe';
但如果我将代码更改obj[key] = newValue;
为未定义的更新,则此方法有效。
为什么呢?
您忘记在嵌套调用中传递newValue
function getObjects(obj, key, val, newVal) {
var newValue = newVal;
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getObjects(obj[i], key, val, newValue));
} else if (i == key && obj[key] == val) {
obj[key] = 'qwe';
}
}
return obj;
}
我有一个LOCATION实体,它包含国家、州和城市。并且我有一个LocationRepository接口定义为: 我想按国家找到所有的州。我可以遵循方法名称标准来查询位置实体的所有内容。如果我想要列表,我需要创建StateRepository接口并在其中查询关于状态的一切吗?如果我可以从LocationRepository中获取它,那么方法是什么样子的?我假设它看起来会像下面这样(当然不起作用)。
我需要更新嵌套在我的用户文档中的一个字段,该字段包含一个part对象数组,以添加新的part。一个part对象如下所示: 所以这意味着$addToset对我的情况没有好处...现在我不知道该怎么办。
我有一个带有嵌套字段的JSON: 我正在使用JSONPATH从嵌套中获取。 我已经将我的JSON文本粘贴到了http://jsonpath.com/这个网站上;并且在使用了这一行之后: 我得到了这个: 使用此行后: 我得到了这个: 我尝试返回(输出)的内容如下: 但是我找不到合适的语法来将这两个组合在一行中,并用一个JSONPATH查询返回它们。
假设我们有以下集合,我对此没有什么问题: > 我想增加“item_name”的价格:“my_item_two”,如果它不存在,应该将它追加到“items”数组中。
问题内容: 假设我有一个像这样的JSON数组: 不,我想基于id查找某个对象,一旦有了该对象,就需要它的子代及其所有childs子代 所以可以说如果 4d024610-a39b-49ce-8581-a18500739a75* 我想找到一个具有ID的元素 * 那应该找到Element Sub2 现在,它应该产生所有将产生的所有子元素id id: 假设我会做 因此,我猜它有两个部分,首先找到“父”元素
问题内容: 这是我在elasticsearch中存储在索引上的数据类型。我必须找到包含主要成分牛肉(且重量小于1000)和成分-(辣椒粉且重量小于250),(橄榄油和重量小于300)以及所有其他成分类似的食谱。 索引的映射是 我的查询是 但这给了Null。有人可以帮我吗?我认为我没有正确使用嵌套查询 问题答案: 试试这个: