Iterate though a json object and get specific data - arrays

I have a json which comes from an API,
"nutrient_value": [
{
"Calcium": [
"29.16",
"mg",
"Red",
"0.00102858984",
"ounce"
]
},
{
"Choline": [
"118.97",
"mg",
"Red",
"0.00419654778",
"ounce"
]
},
{
"Copper": [
"0.12",
"mg",
"Red",
"0.00000423288",
"ounce"
]
},
{
"Crude fat": [
"29.16",
"g",
"Green",
"1.02858984",
"ounce"
]
},
{
"Folate": [
"11.66",
"mcg",
"Red",
"0.00000041129484",
"ounce"
]
},
{
"Iodine": [
"0.0",
"mcg",
"Red",
"0.0",
"ounce"
]
},
{
"Iron": [
"4.08",
"mg",
"Yellow",
"0.00014391792",
"ounce"
]
},
{
"Magnesium": [
"34.99",
"mg",
"Green",
"0.00123423726",
"ounce"
]
},
{
"Manganese": [
"0.02",
"mg",
"Red",
"0.00000070548",
"ounce"
]
},
{
"Niacin (B3)": [
"9.04",
"mg",
"Green",
"0.00031887696",
"ounce"
]
},
{
"Omega-3 excl. ALA and SDA": [
"0.02",
"g",
"Red",
"0.00070548",
"ounce"
]
},
{
"Omega-6": [
"0.02",
"g",
"Red",
"0.00070548",
"ounce"
]
},
{
"Pantothenic acid (B5)": [
"1.07",
"mg",
"Red",
"0.00003774318",
"ounce"
]
},
{
"Phosphorus": [
"332.42",
"mg",
"Red",
"0.01172578308",
"ounce"
]
},
{
"Potassium": [
"573.48",
"mg",
"Yellow",
"0.02022893352",
"ounce"
]
},
{
"Protein": [
"36.94",
"g",
"Green",
"1.30302156",
"ounce"
]
},
{
"Riboflavin (B2)": [
"0.29",
"mg",
"Red",
"0.00001022946",
"ounce"
]
},
{
"Selenium": [
"30.72",
"mcg",
"Red",
"0.00000108361728",
"ounce"
]
},
{
"Sodium (Na)": [
"128.3",
"mg",
"Green",
"0.0045256542",
"ounce"
]
},
{
"Thiamin (B1)": [
"0.08",
"mg",
"Red",
"0.00000282192",
"ounce"
]
},
{
"Vitamin A": [
"8.16",
"mcg",
"Red",
"0.00000028783584",
"ounce"
]
},
{
"Vitamin C": [
"0.0",
"mg",
"Green",
"0.0",
"ounce"
]
},
{
"Vitamin D": [
"0.19",
"mcg",
"Red",
"0.00000000670206",
"ounce"
]
},
{
"Vitamin E": [
"0.33",
"mg",
"Red",
"0.00001164042",
"ounce"
]
},
{
"Zinc (Zn)": [
"8.71",
"mg",
"Red",
"0.00030723654",
"ounce"
]
},
{
"Calories": [
"417.96",
"cal",
null,
"N/A",
"ounce"
]
},
{
"Omega-3/6 ratio": [
"0.65",
"ratio",
"Green",
"N/A",
"ounce"
]
},
{
"Calcium/Phosphorus ratio": [
"0.06",
"ratio",
"Red",
"N/A",
"ounce"
]
}
],
From the above json im decoding it into this
var resJson = json.decode(res);
MPD.Result _mealPlan = MPD.Result.fromJson(resJson["result"]);
///
factory Result.fromJson(Map<String, dynamic> json) => Result(
id: json["id"],
....
nutrientValue: List<NutrientValue>.from(json["nutrient_value"].map((x) => NutrientValue.fromJson(x))),
....
);
"nutrient_value": []
And inside this nutrient_value array, for each item I need to check if given key (eg: "Calcium") exists and if yes, then fetch the values of index [0] and [2] of that key:
Example key "Calcium" exists and
valueCalcium = value of index[0]
colorCalcium = value of index[2]
"nutrient_value": [
{
"Calcium": [
"29.16",
"mg",
"Red",
"0.00102858984",
"ounce"
}
how can I do this in an iterative way?
I have tried this
_mealPlan.nutrientValue.forEach((element) {
if(element.calcium.isNotEmpty){
valCalcium = element.calcium[0];
print(valCalcium);//_mealPlan.nutrientValue[0].calcium[0];
calciumClr = element.calcium[2];
print(calciumClr);
}
});
but it doesn't seem to be the right way.
I'm using each of those two index values in later parts in my code.

You can do like this:
void main() {
Map<String, dynamic> data = {
"success": true,
"result": {
"id": 7,
"daily_allowance_actual_percentage": {
"Bone": [0, "Red"],
"Muscle Meat": [100, "Red"]
},
"daily_calories_from_this_meal_plan": "417.96",
"imperial_weight_of_one_meal": "2.2857552",
"meal_ingredients_would_make": 3,
"meals_per_day": 3,
"nutrient_value": [
{
"Calcium": ["29.16", "mg", "Red", "0.00102858984", "ounce"]
},
{
"Choline": ["118.97", "mg", "Red", "0.00419654778", "ounce"]
},
{
"Copper": ["0.12", "mg", "Red", "0.00000423288", "ounce"]
},
{
"Crude fat": ["29.16", "g", "Green", "1.02858984", "ounce"]
},
{
"Folate": ["11.66", "mcg", "Red", "0.00000041129484", "ounce"]
},
{
"Iodine": ["0.0", "mcg", "Red", "0.0", "ounce"]
},
{
"Iron": ["4.08", "mg", "Yellow", "0.00014391792", "ounce"]
},
{
"Magnesium": ["34.99", "mg", "Green", "0.00123423726", "ounce"]
},
{
"Manganese": ["0.02", "mg", "Red", "0.00000070548", "ounce"]
},
{
"Niacin (B3)": ["9.04", "mg", "Green", "0.00031887696", "ounce"]
},
{
"Omega-3 excl. ALA and SDA": [
"0.02",
"g",
"Red",
"0.00070548",
"ounce"
]
},
{
"Omega-6": ["0.02", "g", "Red", "0.00070548", "ounce"]
},
{
"Pantothenic acid (B5)": [
"1.07",
"mg",
"Red",
"0.00003774318",
"ounce"
]
},
{
"Phosphorus": ["332.42", "mg", "Red", "0.01172578308", "ounce"]
},
{
"Potassium": ["573.48", "mg", "Yellow", "0.02022893352", "ounce"]
},
{
"Protein": ["36.94", "g", "Green", "1.30302156", "ounce"]
},
{
"Riboflavin (B2)": ["0.29", "mg", "Red", "0.00001022946", "ounce"]
},
{
"Selenium": ["30.72", "mcg", "Red", "0.00000108361728", "ounce"]
},
{
"Sodium (Na)": ["128.3", "mg", "Green", "0.0045256542", "ounce"]
},
{
"Thiamin (B1)": ["0.08", "mg", "Red", "0.00000282192", "ounce"]
},
{
"Vitamin A": ["8.16", "mcg", "Red", "0.00000028783584", "ounce"]
},
{
"Vitamin C": ["0.0", "mg", "Green", "0.0", "ounce"]
},
{
"Vitamin D": ["0.19", "mcg", "Red", "0.00000000670206", "ounce"]
},
{
"Vitamin E": ["0.33", "mg", "Red", "0.00001164042", "ounce"]
},
{
"Zinc (Zn)": ["8.71", "mg", "Red", "0.00030723654", "ounce"]
},
{
"Calories": ["417.96", "cal", null, "N/A", "ounce"]
},
{
"Omega-3/6 ratio": ["0.65", "ratio", "Green", "N/A", "ounce"]
},
{
"Calcium/Phosphorus ratio": ["0.06", "ratio", "Red", "N/A", "ounce"]
}
],
"pet_name": "tim",
"show_weight_of_balanced_meal": true,
"suggestion": {
"add_food": {
"Red": [
{
"Calcium": ["Amaranth, grain, whole, uncooked", "Apple, dried"]
},
{
"Copper": ["Amaranth, grain, whole, uncooked", "Apple, dried"]
},
{
"Folate": [
"Amaranth, grain, whole, uncooked",
"Apple, fuji, unpeeled, raw"
]
},
{
"Iodine": ["Amaranth, grain, whole, uncooked", "Apricot, dried"]
},
{
"Manganese": ["Amaranth, grain, whole, uncooked", "Apple, dried"]
},
{
"Omega-3 excl. ALA and SDA": ["Bass, fillet, raw", "Beef Brain"]
},
{
"Omega-6": ["Amaranth, grain, whole, uncooked", "Avocado, raw"]
},
{
"Pantothenic acid (B5)": [
"Amaranth, grain, whole, uncooked",
"Apple, dried"
]
},
{
"Riboflavin (B2)": [
"Amaranth, grain, whole, uncooked",
"Apple, fuji, unpeeled, raw"
]
},
{
"Thiamin (B1)": [
"Amaranth, grain, whole, uncooked",
"Apple, fuji, unpeeled, raw"
]
},
{
"Vitamin A": ["Bean, edamame, from frozen, cooked", "Beef Brain"]
},
{
"Vitamin D": ["Beef kidney, raw", "Beef liver, raw"]
},
{
"Vitamin E": ["Amaranth, grain, whole, uncooked", "Apple, dried"]
},
{
"Crude fat": ["Amaranth, grain, whole, uncooked", "Apple, dried"]
},
{
"Magnesium": ["Amaranth, grain, whole, uncooked", "Apple, dried"]
},
{
"Niacin (B3)": [
"Apple, fuji, unpeeled, raw",
"Apple, golden delicious, unpeeled, raw"
]
},
{
"Protein": ["Amaranth, grain, whole, uncooked", "Apple, dried"]
},
{
"Sodium (Na)": [
"Amaranth, grain, whole, uncooked",
"Apple, dried"
]
}
],
"Yellow": []
},
"remove_food": {
"Red": [
{
"Choline": ["Beef, mince, 15% fat, raw"]
},
{
"Phosphorus": ["Beef, mince, 15% fat, raw"]
},
{
"Selenium": ["Beef, mince, 15% fat, raw"]
},
{
"Zinc (Zn)": ["Beef, mince, 15% fat, raw"]
}
],
"Yellow": [
{
"Iron": ["Beef, mince, 15% fat, raw"]
},
{
"Potassium": ["Beef, mince, 15% fat, raw"]
}
]
}
},
"total_calories_in_a_meal_plan": 645,
"total_imperial_weight_of_a_meal_plan": 10.5822,
"total_weight_of_a_meal_plan": 300,
"weight_of_one_meal": "64.8",
"feeding_plan_details": [
{
"id": 23,
"imperial_quantity": 10.5822,
"quantity": 300,
"food": {
"id": 6,
"bone_percentage": 0,
"name": "Beef, mince, 15% fat, raw"
}
}
]
}
};
List<Map<String, dynamic>> nutrientValue = data["result"]["nutrient_value"];
List<Map<String, dynamic>> filteredData = nutrientValue
.where((Map<String, dynamic> element) =>
element.keys.toList()[0] == "Calcium")
.toList();
for (Map<String, dynamic> i in filteredData) {
print("${i[i.keys.toList()[0]][0]} && ${i[i.keys.toList()[0]][2]}");
}
}

Related

How to update the value to the nested object array in mongodb document?

I have following document on which the update needs to be done.
{
"_id": "Colorcode_1",
"Combination": [
{
"color": [
{
"mixture": [
"Red",
"Green"
]
}
],
"code": "Maroon"
},
{
"color": [
{
"mixture": [
"Yellow",
"Green"
]
}
],
"code": "Light Green"
}
]
}
Now what I need to do is to update the document by adding the value "Blue" in the "mixture" field where "code" is "Maroon". Something like this. This needs to be done using $addToSet
{
"_id": "Colorcode_1",
"Combination": [
{
"color": [
{
"mixture": [
"Red",
"Green",
"Blue"
]
}
],
"code": "Maroon"
},
{
"color": [
{
"mixture": [
"Yellow",
"Green"
]
}
],
"code": "Light Green"
}
]
}
Any help regarding this would be highly helpful.
Here is option with arrayFilters:
db.collection.update({
"Combination.code": "Maroon"
},
{
"$addToSet": {
"Combination.$[x].color.$[y].mixture": "Blue"
}
},
{
arrayFilters: [
{
"x.code": "Maroon"
},
{
"y.mixture": {
$exists: true
}
}
]
})
Explained:
Filter all documents having code:Marron , good to have index on this field if collection is big
Use arrayFilter x.code to add the array element to mixture if mixture exists ( identified by y arrayFilter)
playground
I found this update difficult because of the data model, and I'm hoping you'll get a better/simpler answer.
Anyway, here's one way you could do it. I would test this on more/different data to insure it's correct.
db.collection.update({
"_id": "Colorcode_1",
"Combination.code": "Maroon"
},
[
{
"$set": {
"Combination": {
"$map": {
"input": "$Combination",
"as": "elem",
"in": {
"$cond": [
{ "$eq": [ "$$elem.code", "Maroon" ] },
{
"$mergeObjects": [
"$$elem",
{
"color": {
"$map": {
"input": "$$elem.color",
"as": "colorElem",
"in": {
"$cond": [
{
"$reduce": {
"input": { "$objectToArray": "$$colorElem" },
"initialValue": false,
"in": {
"$or": [
"$$value",
{ "$eq": [ "$$this.k", "mixture" ] }
]
}
}
},
{
"mixture": {
"$setUnion": [ "$$colorElem.mixture", [ "Blue" ] ]
}
},
"$$colorElem"
]
}
}
}
}
]
},
"$$elem"
]
}
}
}
}
}
])
Try it on mongoplayground.net.

Highcharts: Custom area outline for line joining each marker

I'm trying to get a gradient color applied onto outline of an area series and the color depends on colors of both markers at the two ends, which'll be different for each line.
Used, highcharts multicolor_series module, for some reason it only draws and colors outline for 2 lines and doesn't draw/completes the last one. Here's my JSFiddle link: https://jsfiddle.net/pgkk/s29d51zt/872/
Can you please help me solve this, where am I going wrong? Thanks in advance.
"credits": {
"enabled": false
},
"chart": {
// backgroundColor: '#F5F7F7',
"polar": true,
"height": 190,
"width": 290,
"minWidth": 250,
"marginBottom": -25,
"style": {
"fontFamily": [
"WhitneyNarrBook",
"Roboto",
"Arial",
"sans-serif"
],
"fontWeight": 400,
"fontSize": 11,
"letterSpacing": "-0.06px",
"lineHeight": "16px"
}
},
"tooltip": {
"enabled": false
},
"title": {
"text": ""
},
"xAxis": {
"min": 0,
"gridZIndex": 4,
"gridLineColor": "#dce1e6",
"lineColor": "#dce1e6",
"categories": [
"Cat1",
"Cat2",
"Cat3"
],
"tickmarkPlacement": "on",
"lineWidth": 0,
"labels": {
"useHTML": true,
"align": "center",
"style": {
"whiteSpace": "nowrap",
"color": "#26415e",
"fontSize": "12px"
}
}
},
"yAxis": {
"gridLineInterpolation": "polygon",
"gridZIndex": 4,
"gridLineColor": "#dce1e6",
"lineColor": "#dce1e6",
"min": 0,
"max": 100,
"showFirstLabel": false,
"showLastLabel": true,
"tickInterval": 25,
"labels": {
"align": "center",
"y": 5,
"x": 0,
"style": {
"color": "#333333",
"fontSize": "10px"
}
}
},
"plotOptions": {
"series": {
"marker": {
"radius": 2.5
},
"states": {
"hover": {
"enabled": false
},
"inactive": {
"enabled": false
}
}
},
"area": {
"dataLabels": {
"enabled": false
}
}
},
"series": [{
"showInLegend": false,
"data": [
100,
100,
100
],
"color": {
"radialGradient": {
"cx": 0.5,
"cy": 0.7,
"r": 0.5
},
"stops": [
[
0,
"#DFA124"
],
[
0.55,
"#AF9D3F"
],
[
0.75,
"#5A9772"
],
[
1,
"#229595"
]
]
},
"pointPlacement": "on",
"marker": {
"symbol": "circle"
},
"fillOpacity": 0.5,
"type": "area",
"lineColor": "transparent"
},
{
"showInLegend": false,
"data": [{
"y": 33,
"color": "#AF9D3F"
},
{
"y": 65,
"color": "#229595"
},
{
"y": 28,
"color": "#DFA124"
}
],
zIndex: 5,
"pointPlacement": "on",
"type": "area",
//lineWidth: 5,
//lineColor: 'gray',
"color": "transparent",
"marker": {
"symbol": "circle"
}
},
{
"showInLegend": false,
"data": [
[
33,
100
],
[
65,
100
],
[
28,
100
]
],
"pointPlacement": "on",
"type": "arearange",
"fillColor": "white",
"opacity": 1,
"lineColor": "transparent",
"marker": {
"fillColor": "#dce1e6",
"lineColor": "#dce1e6"
}
},
{
type: 'coloredline',
showInLegend: false,
pointPlacement: "on",
data: [{
y: 33,
segmentColor: {
linearGradient: {
x1: 0,
x2: 0,
y1: 0,
y2: 1
},
stops: [
//[0, '#AF9D3F'], // start
[0.5, '#AF9D3F'], // middle
[1, '#229595'] // end
]
}
}, {
y: 65,
segmentColor: {
linearGradient: {
x1: 0,
x2: 0,
y1: 0,
y2: 1
},
stops: [
//[0, '#AF9D3F'], // start
[0.25, '#DFA124'],
[1, '#229595'] // middle
]
}
}, {
y: 28,
"segmentColor": {
"linearGradient": {
"x1": 0,
"x2": 0,
"y1": 0,
"y2": 1
},
"stops": [
[
0.5,
"#229595"
],
[
1,
"#DFA124"
]
]
}
},
]
}
]
For each outline you can add separate line series and with corresponding gradient and disabled marker.
Try fiddle link
{
"pointPlacement": "on",
"showInLegend": false,
data: [
[33],
[65],
[null]
],
type: 'line',
marker: {
enabled: false
},
color: {
linearGradient: {
x1: 0,
x2: 0,
y1: 0,
y2: 1
},
stops: [
[0, '#AF9D3F'],
[1, '#229595']
]
}
}, {
"showInLegend": false,
"pointPlacement": "on",
data: [
[null],
[65],
[28],
],
type: 'line',
marker: {
enabled: false
},
color: {
linearGradient: {
x1: 0,
x2: 0,
y1: 0,
y2: 1
},
stops: [
[0, '#AF9D3F'],
[1, '#229595']
]
}
}, {
"showInLegend": false,
"pointPlacement": "on",
data: [
[33],
[null],
[28],
],
type: 'line',
marker: {
enabled: false
},
color: {
linearGradient: {
x1: 0,
x2: 0,
y1: 0,
y2: 1
},
stops: [
[0, '#AF9D3F'],
[1, '#AF9D3F']
]
}
}
https://jsfiddle.net/koushlendra/o5dujm0z/719/

Dataweave 2.0 array filtering based on another arrays values

I'm attempting to try and match/filter the following lineId values in the unmatchedIds array to then filter the result set of exampleFile, by processorTransactionId. The result would be the removal of the last financialTransactionEntity, with the processorTransactionId = "000000062121029333".
In theory the sizes of both the unmatchedIds array and exampleFile array could be unbounded.
Any guidance/advice/examples would be much appreciated. I'm having difficult using the dataweave filter to achieve this at the moment.
{
"unmatchedIds": [
{
"lineId": "000000062121029111"
},
{
"lineId": "000000062121029222"
}
]
}
exampleFile
[{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "Burger Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000001000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029111"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029222"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029333"
}
}
]
You can make use of data selector with filter. See below
%dw 2.0
output application/java
import * from dw::core::Arrays
var unMatchedIds = {
"unmatchedIds": [
{
"lineId": "000000062121029111"
},
{
"lineId": "000000062121029222"
}
]
}
var payload = [{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "Burger Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000001000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029111"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029222"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029333"
}
}
]
---
using (unMatchedArray = unMatchedIds.unmatchedIds.*lineId)
payload[?(unMatchedArray contains $.financialTransactionEntity.processorTransactionId)]
unMatchedArray here is just a list of unmatched ids coming from your original object (unMatchedIds). Data selector will just include entry if financialTransactionEntity.processorTransactionId is in the unMatchedArray.
You can use groupBy and filter functions to achieve the result. First, you can group unMatchIds by lineId and then you can apply a filter on your actual payload to eliminate all unmatched items.
output application/json
var unMatchIdsGrouped = var.unMatchIds.unmatchedIds groupBy $.lineId
---
payload filter ((item) -> unMatchIdsGrouped[ item.financialTransactionEntity.processorTransactionId] !=null)
I would suggest transforming the unmatchedIds object to an array of id's, then filtering exampleFile objects based on whether or not the processorTransactionId is found in the compared array using contains full script:
%dw 2.0
output application/java
var unMatchedIds = {
"unmatchedIds": [
{
"lineId": "000000062121029111"
},
{
"lineId": "000000062121029222"
}
]
}
var exampleFile = [{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "Burger Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000001000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029111"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029222"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029333"
}
}
]
---
exampleFile filter (unMatchedIds.unmatchedIds.lineId contains $.financialTransactionEntity.processorTransactionId)
Here's another answer ....Hope it helps
%dw 2.2
output application/json
var inpUnmatchedIds = {
"unmatchedIds": [
{
"lineId": "000000062121029111"
},
{
"lineId": "000000062121029222"
}
]
}
var exampleIds = [{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "Burger Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000001000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029111"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029222"
}
},
{
"financialTransactionEntity": {
"cardAcceptor": {
"name": "McDonalds Inc.",
"countryCode": "GBP"
},
"financialTransaction": {
"debitOrCredit": "C",
"amountInOriginalCurrency": {
"amount": "0000002000",
"exponent": "2"
},
"originalCurrencyCode": "826",
"transactionDate": "2020-02-18"
},
"processorTransactionId": "000000062121029333"
}
}
]
---
exampleIds filter (value) -> ((((inpUnmatchedIds pluck $.lineId))[0]) contains (value.financialTransactionEntity.processorTransactionId))

angular ui tree for complex json

How to create angular ui tree for complex json?
[
{
"name": "bmw",
"model": "x3",
"specs": [
{
"name": "bmw",
"maxspeed": 350,
"minspeed": 0,
"model": "x3",
"type": "car"
},
{
"value": 30,
"name": "bmw",
"maxspeed": 350,
"minspeed": 0,
"model": "x3",
"type": "car"
}
],
"available": true,
"price": 50
},
{
"name": "audi",
"model": "r8",
"specs": [
{
"color": [
{
"value": "red",
"price": 100
},
{
"value": [
"white",
"black"
],
"price": 200
}
],
"maxspeed": 330,
"minspeed": 0,
"type": "car"
},
{
"color": [
{
"value": "blue",
"price": 300
},
{
"value": [
"yellow",
"gold"
],
"price": 500
}
],
"maxspeed": 330,
"minspeed": 0,
"type": "car"
}
],
"available": true
}
]

Angular states not showing amcharts after switching back to that state

I have two charts divs in html which I am able to display first time. but when my state changes and I come back to the state where I displayed charts. Then charts are not shown. I think I have to re-attach the dataProvider and render it again but i don't know how.
this is my controller
.controller('HomeCtrl', function ($location,$window) {
AmCharts.makeChart("chartdiv-pie", {
"type": "pie",
"theme": "light",
"dataProvider": [{
"title": "20%",
"value": 3852,
"color": "#18aa9f"
}, {
"title": "40%",
"value": 3899,
"color": "#e65548"
},
{
"title": "40%",
"value": 4899,
"color": "#e1e3e4"
}
],
"title": "AmCharts",
"color": "black",
"titleField": "title",
"valueField": "value",
"radius": "25%",
"outlineAlpha":0,
"innerRadius": "40%",
"balloonText": "[[value]]",
"labelText": "[[title]]",
"labelsEnabled": true,
"colorField": "color",
"labelText": "[[title]]",
"export": {
"enabled": true
},
});
var chart = AmCharts.makeChart( "chartdiv-male", {
"type": "serial",
"addClassNames": true,
"theme": "light",
"autoMargins": false,
"marginLeft": 30,
"marginRight": 8,
"marginTop": 10,
"marginBottom": 26,
"balloon": {
"adjustBorderColor": false,
"horizontalPadding": 10,
"verticalPadding": 8,
"color": "#ffffff"
},
"dataProvider": [ {
"year": "Pos",
"income": 30.1,
"color": "#FF0F00",
"expenses": 34.9,
}, {
"year": "Neg",
"income": 29.5,
"expenses": 31.1
}, {
"year": "Neu",
"income": 30.6,
"expenses": 28.2,
"dashLengthLine": 5,
"columnColor": 'green'
} ],
"valueAxes": [ {
"axisAlpha": 0,
"position": "left"
} ],
"startDuration": 1,
"graphs": [ {
"alphaField": "alpha",
"balloonText": "<span style='font-size:12px;'>[[title]] in [[category]]:<br><span style='font-size:20px;'>[[value]]</span> [[additional]]</span>",
"fillAlphas": 1,
"title": "Income",
"type": "column",
"valueField": "income",
"dashLengthField": "dashLengthColumn"
}, ],
"categoryField": "year",
"categoryAxis": {
"gridPosition": "start",
"axisAlpha": 0,
"tickLength": 0
},
"export": {
"enabled": true
}
} );
}
these are my states
.state('home.stats', {
url:'/stats',
templateUrl: 'views/stats.html',
controller: 'StatsCtrl',
controllerAs: 'stats'
})
.state('home.posts', {
url:'/posts',
templateUrl: 'views/posts.html',
controller: 'PostsCtrl',
controllerAs: 'posts'
});

Resources