通过使用 Javascript 操作现有 JSON 对象来创建 JSON 对象
Create JSON object by manipulating existing JSON object using Javascript
我有一个JSON对象,我正在其中操作数据并尝试构造一个新的JSON对象。问题是我无法找到创建 JSON 对象的动态部分。这是实际的 JSON 对象
[{"acptFlag":true,"count":14288,"limsFlag":true,"plantId":30,"plantName":"Camilla, GA","supplierId":20,"supplierName":"Keystone Foods"},{"acptFlag":false,"count":344,"limsFlag":true,"plantId":30,"plantName":"Camilla, GA","supplierId":20,"supplierName":"Keystone Foods"},{"acptFlag":false,"count":700,"limsFlag":true,"plantId":31,"plantName":"Albany, KY","supplierId":20,"supplierName":"Keystone Foods"},{"acptFlag":true,"count":9500,"limsFlag":true,"plantId":31,"plantName":"Albany, KY","supplierId":20,"supplierName":"Keystone Foods"},{"acptFlag":false,"count":227,"limsFlag":true,"plantId":32,"plantName":"Green Forest, AR","supplierId":21,"supplierName":"Tyson Foods"},{"acptFlag":true,"count":7049,"limsFlag":true,"plantId":32,"plantName":"Green Forest, AR","supplierId":21,"supplierName":"Tyson Foods"},{"acptFlag":true,"count":10742,"limsFlag":true,"plantId":33,"plantName":"Dawson, GA","supplierId":21,"supplierName":"Tyson Foods"},{"acptFlag":false,"count":506,"limsFlag":true,"plantId":33,"plantName":"Dawson, GA","supplierId":21,"supplierName":"Tyson Foods"}]
所需的 JSON 对象是
[{"supplierName":"Keystone Foods","1":(344/(344+14288)) , "2":700/(700+9500))}},{"supplierName":"Tyson Foods"","1":(227/(227+7049)) , "2":(506/(506+10742))}}]
在这里,我试图将"Keystone Foods"数据放在一个对象中。 "1":(344/(344+14288)) , "2":700/(700+9500))
表示假计数/真计数。"1
"和"2
"代表植物的计数。我在构建植物计数代码时陷入了困境。
这是我现有的代码。
var resultJSON = {}, arr = [];
var jsonObj = JSON.parse(obj)
for (var key in jsonObj) {
if (jsonObj.hasOwnProperty(key)) {
var val = jsonObj[key];
var supplierName = val.supplierName;
arr.push(supplierName);
}
}
var M = {}, R = []
getUniqueSuppliers(arr)
function getUniqueSuppliers(arr) {
for(var i = 0; i < arr.length; i++) {
M[arr[i]] = "supplierName"
}
for(var i in M) {
R.push(i)
}
}
checkEachSupplier(R)
function checkEachSupplier(R) {
for (var index = 0; index < R.length; index++) {
var supplierName = R[index]
createNewJSON(supplierName)
}
}
getPlantTotalValueBasedOnSupplier(R);
function createNewJSON(supplierName) {
for (var key in jsonObj) {
if (jsonObj.hasOwnProperty(key)) {
var val = jsonObj[key];
if(supplierName == val.supplierName) {
resultJSON[supplierName] = {"supplierName" : supplierName}
}
}
}
}
console.log(resultJSON)
我的杰伦斯小提琴:https://jsfiddle.net/7u5qphx9/6/
也许这会有所帮助。
它使用临时对象temp
用于count
。
{
"Keystone Foods": {
"30": {
"true": 14288,
"false": 344
},
"31": {
"false": 700,
"true": 9500
}
},
"Tyson Foods": {
"32": {
"false": 227,
"true": 7049
},
"33": {
"true": 10742,
"false": 506
}
}
}
部分代码:
temp = obj1.reduce(function (r, a) {
// ...
return r;
}, {}),
此Array.prototype.reduce()
遍历obj1
,并将空对象作为起始值。回调函数返回对象r
,用于下一个迭代步骤,或在结束时返回结果。
r[a.supplierName] = r[a.supplierName] || {};
一个简短的写作,如果r[a.supplierName]
有一些值,比取r[a.supplierName]
,否则做一个新对象。
{ "Keystone Foods": {} }
r[a.supplierName][a.plantId] = r[a.supplierName][a.plantId] || {};
这里的物业plantID
也是如此。如果没有值,则会创建一个新对象。
{ "Keystone Foods": { "30": {} } }
r[a.supplierName][a.plantId][a.acptFlag] = a.count;
这会将count
分配给 a.acptFlag
值的属性。
{ "Keystone Foods": { "30": { "true": 14288 }, }
那是针对对象的。现在,我看一下使用所需对象构建新数组的部分o
.
obj2 = Object.keys(temp).map(function (k) {
// ...
return o;
});
首先从temp
获取所有键,并使用Array.prototype.map()
迭代它,因为这应该构建一个新的数组。
在回调函数内部
var o = { supplierName: k };
使用属性supplierName
和实际键的值生成一个新对象。
Object.keys(temp[k]).forEach(function (kk, i) {
// ...
});
现在要迭代 plantId 的下一级键。
o[i + 1] = '' + temp[k][kk].false + ' / (' + temp[k][kk].false + ' + ' + temp[k][kk].true + ')';
对于每个 plantID,都会使用真属性和假属性的值创建一个新属性。分配的值是一个字符串。(如果行更改为 o[i + 1] = temp[k][kk].false / (temp[k][kk].false + temp[k][kk].true);
,则可能是数字)。
var obj1 = [{ "acptFlag": true, "count": 14288, "limsFlag": true, "plantId": 30, "plantName": "Camilla, GA", "supplierId": 20, "supplierName": "Keystone Foods" }, { "acptFlag": false, "count": 344, "limsFlag": true, "plantId": 30, "plantName": "Camilla, GA", "supplierId": 20, "supplierName": "Keystone Foods" }, { "acptFlag": false, "count": 700, "limsFlag": true, "plantId": 31, "plantName": "Albany, KY", "supplierId": 20, "supplierName": "Keystone Foods" }, { "acptFlag": true, "count": 9500, "limsFlag": true, "plantId": 31, "plantName": "Albany, KY", "supplierId": 20, "supplierName": "Keystone Foods" }, { "acptFlag": false, "count": 227, "limsFlag": true, "plantId": 32, "plantName": "Green Forest, AR", "supplierId": 21, "supplierName": "Tyson Foods" }, { "acptFlag": true, "count": 7049, "limsFlag": true, "plantId": 32, "plantName": "Green Forest, AR", "supplierId": 21, "supplierName": "Tyson Foods" }, { "acptFlag": true, "count": 10742, "limsFlag": true, "plantId": 33, "plantName": "Dawson, GA", "supplierId": 21, "supplierName": "Tyson Foods" }, { "acptFlag": false, "count": 506, "limsFlag": true, "plantId": 33, "plantName": "Dawson, GA", "supplierId": 21, "supplierName": "Tyson Foods" }],
temp = obj1.reduce(function (r, a) {
r[a.supplierName] = r[a.supplierName] || {};
r[a.supplierName][a.plantId] = r[a.supplierName][a.plantId] || {};
r[a.supplierName][a.plantId][a.acptFlag] = a.count;
return r;
}, {}),
obj2 = Object.keys(temp).map(function (k) {
var o = { supplierName: k };
Object.keys(temp[k]).forEach(function (kk, i) {
o[i + 1] = '' + temp[k][kk].false + ' / (' + temp[k][kk].false + ' + ' + temp[k][kk].true + ')';
});
return o;
});
document.write('<pre>' + JSON.stringify(temp, 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(obj2, 0, 4) + '</pre>');
- jQuery匹配JSON对象的部分文本
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 用javascript从列表对象(JSON的)构建diffrent选项卡
- php请求带有多个对象json-jquery
- AngularJS,过滤器:如何将一个巨大的对象(JSON)变成一个数组
- 动态属性对象 - JSON
- JavaScript 对象 (JSON) 中的动态设置值
- 从数组查询获取对象 JSON 值时出错
- 使用jQuerygetJSON将多维对象JSON转换为HTML
- 需要从 Angular JS 应用程序中的另一个 JSON 对象数组填充 JSON 数组的每个对象 JSON 对象数组
- 嵌套对象JSON排序JavaScript
- PHP在MySQL中保存来自Javascript的对象"JSON.stringify"通过Ajax
- 将JavaScript对象/ JSON转换为PHP数组
- JSON对象.JSON对象内部
- 访问对象的对象- JSON API
- 数组到对象JSON
- Message":"传入的无效对象(JSON数据格式化问题)