Get Json arrays values in a javascript function - javascript
I have defined a json array in a file as
{
mainServiceBar= [
{ "mainServiceName":"ECONOMIC SERVICES" , "mainServiceValue":"23.2" },
{ "mainServiceName":"SOCIAL SERVICES" , "mainServiceValue":"34.5" },
{ "mainServiceName":"DEFENSE" , "mainServiceValue":"4.5" },
{ "mainServiceName":"GENERAL PUBLIC SERVICES" , "mainServiceValue":"19" },
{ "mainServiceName":"DEBT BURDEN" , "mainServiceValue":"18.8" },
];
subServiceBar1: [
{ "subServiceName":"agriculture" , "subServiceValue":"12.5" },
{ "subServiceName":"trade" , "subServiceValue":"12.5" },
{ "subServiceName":"tourism" , "subServiceValue":"12.5" },
{ "subServiceName":"power and energy" , "subServiceValue":"12.5" },
{ "subServiceName":"water resource" , "subServiceValue":"12.5" }
{ "subServiceName":"communication roads" , "subServiceValue":"12.5" }
{ "subServiceName":"other economic services" , "subServiceValue":"12.5" },
{ "subServiceName":"subsidy" , "subServiceValue":"12.5" },
];
}
now i want these json arrays values in a javascript function , I have done few things but it I didn't get the values , my code is as follows :
function getJsonArray() {
return $.getJSON("myjson.js");
}
function socialservice(thisv) {
json = getJsonArray();
for (var key in json) {
if (json.hasOwnProperty(key)) {
var item = json[key];
alert(item.mainServiceName);
}
}
return false;
}
**EDITED
I have also tried this :
$.getJSON("myjson.json", function(data) {
alert("val");
var items = [];
$.each(data, function(key, val) {
alert(val);
});
});
but it do\esn't alert anything means it do not get json data
It alerts undefined , Please suggest me some way to get the values , Thanks
please change your json file to below (it was wrongly formatted)
{
mainServiceBar: [
{ "mainServiceName":"ECONOMIC SERVICES" , "mainServiceValue":"23.2" },
{ "mainServiceName":"SOCIAL SERVICES" , "mainServiceValue":"34.5" },
{ "mainServiceName":"DEFENSE" , "mainServiceValue":"4.5" },
{ "mainServiceName":"GENERAL PUBLIC SERVICES" , "mainServiceValue":"19" },
{ "mainServiceName":"DEBT BURDEN" , "mainServiceValue":"18.8" }
],
subServiceBar1: [
{ "subServiceName":"agriculture" , "subServiceValue":"12.5" },
{ "subServiceName":"trade" , "subServiceValue":"12.5" },
{ "subServiceName":"tourism" , "subServiceValue":"12.5" },
{ "subServiceName":"power and energy" , "subServiceValue":"12.5" },
{ "subServiceName":"water resource" , "subServiceValue":"12.5" },
{ "subServiceName":"communication roads" , "subServiceValue":"12.5" },
{ "subServiceName":"other economic services" , "subServiceValue":"12.5" },
{ "subServiceName":"subsidy" , "subServiceValue":"12.5" }
]
}
also change the socialservice function code to below it was wrongly retrieving the values :
function socialservice(thisv) {
$.getJSON("myjson.js", function(json) {
for (key in json) {
$.each(json[key], function(k, arrayItem) {
alert(arrayItem.mainServiceName);
});
}
});
return false;
}
call the function with socialservice(); anywhere in your code.
Accordin with getJson doc you should write a callback in order to manipulate the data.
$.getJSON( "myjson.js", function( json ) {
for (var key in json) {
// code
}
});
NB: Your JSON code posted is invalid. There are a lot of errors.
Try to replace with this:
{
"mainServiceBar": [
{ "mainServiceName":"ECONOMIC SERVICES" , "mainServiceValue":"23.2" },
{ "mainServiceName":"SOCIAL SERVICES" , "mainServiceValue":"34.5" },
{ "mainServiceName":"DEFENSE" , "mainServiceValue":"4.5" },
{ "mainServiceName":"GENERAL PUBLIC SERVICES" , "mainServiceValue":"19" },
{ "mainServiceName":"DEBT BURDEN" , "mainServiceValue":"18.8" }
],
"subServiceBar1": [
{ "subServiceName":"agriculture" , "subServiceValue":"12.5" },
{ "subServiceName":"trade" , "subServiceValue":"12.5" },
{ "subServiceName":"tourism" , "subServiceValue":"12.5" },
{ "subServiceName":"power and energy" , "subServiceValue":"12.5" },
{ "subServiceName":"water resource" , "subServiceValue":"12.5" },
{ "subServiceName":"communication roads" , "subServiceValue":"12.5" },
{ "subServiceName":"other economic services" , "subServiceValue":"12.5" },
{ "subServiceName":"subsidy" , "subServiceValue":"12.5" }
]
}
Change it to this:
function getJsonArray(){
$.ajax({
url : 'myjson.js',
type: 'GET',
success : socialservice
})
}
function socialservice(data){
json= data;
for (var key in json) {
if (json.hasOwnProperty(key)) {
var item = json[key];
alert(item.mainServiceName); }}
return false;
}
Related
Convert multiple json object into array of object
My data is currently stored in this format: { "Site1":{ "week":[ { "access":1 }, { "access":8 } ] }, "Site2":{ "week":[ { "access":16 } ] }, "Site3":{ "week":[ { "access":2 }, { "access":6 }, { "access":2 } ] } } And I need to convert it into this format: [ { "id":"Site1", "access":[1,8] }, { "id":"Site2", "access":[16] }, { "id":"Site3", "access":[2,6,2] } ] As you can see, I also need to take the keys (site name) and make them the "id" values. Any ideas on how I can do this in JavaScript (I'm using angular v9)? I'm not very good at restructuring that type of data.
You can first take entries and then map it: var data={ "Site1":{ "week":[ { "access":1 }, { "access":8 } ] }, "Site2":{ "week":[ { "access":16 } ] }, "Site3":{ "week":[ { "access":2 }, { "access":6 }, { "access":2 } ] }}; var result = Object.entries(data).map(([k,v])=>({id:k, access: v.week.map(p=>p.access)})); console.log(result);
Object.keys() map() const data = { Site1: { week: [ { access: 1, }, { access: 8, }, ], }, Site2: { week: [ { access: 16, }, ], }, Site3: { week: [ { access: 2, }, { access: 6, }, { access: 2, }, ], }, }; const result = Object.keys(data).map(key => ({ id: key, access: data[key].week.map(w => w.access), })); console.log(result);
you can simply use this code for your desired result. Object.keys(data).map(key => ( { id: key, access: data[key].week.map(obj => obj.access), } )) Let me know if you face any issue.
Cascade Dropdown JSON
Yes, this has been posted many times. But I am unable to locate the assistance I need in the other posts. I have a JSON which I am using to populate cascading dropdowns. The initial population of the first dropdown works great, but I am unable to have the other two populate. I believe it is due to the nested arrays in JSON of which I have tried looping, nested looping etc...... Here is my JSON: "DATA": [ { "productcodelist": [ { "tablenamelist": [ { "tablenamevalue": "FryLineProcessGrading" } ], "productcodevalue": 10055440000148 }, { "tablenamelist": [ { "tablenamevalue": "FryLineProcessGrading" } ], "productcodevalue": 10071179018124 }, { "tablenamelist": [ { "tablenamevalue": "FryLineProcessGrading" }, { "tablenamevalue": "ProcessGradingFry" }, { "tablenamevalue": "UODrying" }, { "tablenamevalue": "UOFreezing" } ], "productcodevalue": 10071179036432 }, { "tablenamelist": [ { "tablenamevalue": "FryLineProcessGrading" }, { "tablenamevalue": "ProcessGradingFry" }, { "tablenamevalue": "UODrying" }, { "tablenamevalue": "UOFreezing" } ], "productcodevalue": 10071179037545 }, { "tablenamelist": [ { "tablenamevalue": "FryLineProcessGrading" }, { "tablenamevalue": "ProcessGradingFry" }, { "tablenamevalue": "UODrying" }, { "tablenamevalue": "UOFreezing" } ], "productcodevalue": 10071179037613 }, { "tablenamelist": [ { "tablenamevalue": "FryLineProcessGrading" }, { "tablenamevalue": "ProcessGradingFry" }, { "tablenamevalue": "UODrying" }, { "tablenamevalue": "UOFreezing" } ], "productcodevalue": 10071179462033 } ], "linevalue": 1 }, { "productcodelist": [ { "tablenamelist": [ { "tablenamevalue": "HalverSizeCounts" } ], "productcodevalue": 10071179036449 } ], "linevalue": 2 }, { "productcodelist": [ { "tablenamelist": [ { "tablenamevalue": "MetalDetectorCheckSheet" } ], "productcodevalue": 10071179036432 } ], "linevalue": 10 } ] } Here is my JavaScript code: $(document).ready(function(){ var specData = []; var lineCategory = $('#line').val(); var productcodeCategory = $('#productcode').val(); $.ajax( { type: "get", url: "index.cfm?controller=ProcessSpecs&Action=getSpecData", dataType: "json", success: function(objResponse) { if (objResponse.SUCCESS == true) { specData = objResponse.DATA; $('#line') .append('<option>Select Lines</option>') $.each(specData, function(k, v) { $('#line') .append($('<option>', {value : v.linevalue}) .text(v.linevalue)) }); $('#line').val(linevalue).trigger('change'); } else { } }, error: function(objRequest, strError) { } }); $('#line').change(function() { var val = $(this).val(); var specSelected = jQuery.grep(specData, function(element, index) { if (element.linevalue == val) { return element.productcodelist; } }); $('#productcode') .find('option') .remove() .end(); $.each(specData.productcodelist, function(k, v) { $('#productcode') .append($('<option>', {value: v.productcodevalue}) .text(v.productcodevalue)); }); }); }); The #line change function will start but I am unable to get the productcodevalue to be created and populated in the productcode dropdown. The following code does work to get the JSON data that is associated with a specific line. var specSelected = jQuery.grep(specData, function(element, index) { if (element.linevalue == val) { return element.productcodelist; } }); Verified by adding: alert(JSON.stringify(specSelected)); But after that anything I have tried or plagiarized has not worked in populating the productcodevalue into the #productcode select box. <form name="getSpecData"> <select name="line" id="line"> </select> <select name="productcode" id="productcode"> </select> <select name="tablename" id="tablename"> </select> <input type="Submit" value="Get Specs" /> </form> Any advice, assistance, and or guidance is appreciated. Update: I have figured out how to populate the #productcode select. Not elegant, but workable. $('#line').change(function() { var val = $(this).val(); var specSelected = jQuery.grep(specData, function(element, index) { if (element.linevalue == val) { return element.productcodelist; } }); $('#productcode') .find('option') .remove() .end(); $('#productcode') .append('<option>Select Product Code</option>') $('#tablename') .append('<option>Select Product Code First</option>') for (productcodelist in specSelected) { for (tablenamelist in specSelected[productcodelist]) { $.each(specSelected[productcodelist][tablenamelist], function(k, v) { $('#productcode') .append($('<option>', {value: v.productcodevalue}) .text(v.productcodevalue)); }); } } }); Still seeking advice on the third dropdown for tablename since it is a nested array that will need to equal the line and productcode dropdowns.
Not elegant, but figured it out. Since it works I will close this. If anyone sees a way I can improve my code, by all means post your recommendations here. $('#productcode').change(function() { var lineval = $('#line').val(); var productcodeval = $("#productcode").val(); var specSelected = jQuery.grep(specData, function(element, index) { if (element.linevalue == lineval) { return element.productcodelist; } }); $('#tablename') .find('option') .remove() .end(); $('#tablename') .append('<option>Select Product Code</option>') for (productcodelist in specSelected) { for (tablenamelist in specSelected[productcodelist]) { for (productcodevalue in specSelected[productcodelist][tablenamelist]) { if(specSelected[productcodelist][tablenamelist][productcodevalue].productcodevalue == productcodeval) { for (tablenamevalue in specSelected[productcodelist][tablenamelist][productcodevalue]) { $.each(specSelected[productcodelist][tablenamelist][productcodevalue][tablenamevalue], function(k, v) { $('#tablename') .append($('<option>', {value: v.tablenamevalue}) .text(v.tablenamevalue)); }); } } } } } });
Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>)
I need some help with this error: Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse () at Object.success (dashboard.js:22) at fire (jquery-3.3.1.js:3268) at Object.fireWith [as resolveWith] (jquery-3.3.1.js:3398) at done (jquery-3.3.1.js:9305) at XMLHttpRequest. (jquery-3.3.1.js:9548) I try to transform a string to a json object using JSON.parse() that cause that error. I am using oracleJet and this is my code: function DashboardViewModel() { var self = this; self.lineTypeValue = ko.observable('curved'); var scatterSeries = []; $.getJSON( "http://localhost:8080/points", function (data) { console.info(data); var ch = '{"name":"graphe1","items":'+JSON.stringify(data.results[1])+ '}'; console.info(ch); console.info(JSON.parse(scatterSeries)); scatterSeries.push(JSON.parse(ch)); }); /* chart data */ this.scatterSeriesValue = ko.observableArray(scatterSeries); self.lineTypeOptions = [ {id: 'straight', label: 'straight'}, {id: 'curved', label: 'curved'}, {id: 'stepped', label: 'stepped'}, {id: 'segmented', label: 'segmented'}, {id: 'none', label: 'none'} ]; } The Json that I get from "http://localhost:8080/points" look like this: { "results":[ [ { "b":"0.110547334", "cost":"0.000000", "w":"1.998889" } ], [ { "x":0, "y":0 }, { "x":1, "y":2 }, { "x":2, "y":4 }, { "x":3, "y":6 }, { "x":4, "y":8 }, { "x":5, "y":10 }, { "x":6, "y":12 }, { "x":7, "y":14 }, { "x":8, "y":16 }, { "x":9, "y":18 }, { "x":10, "y":20 }, { "x":11, "y":22 }, { "x":12, "y":24 }, { "x":13, "y":26 }, { "x":14, "y":28 }, { "x":15, "y":30 }, { "x":16, "y":32 }, { "x":17, "y":34 }, { "x":18, "y":36 }, { "x":19, "y":38 }, { "x":20, "y":40 }, { "x":21, "y":42 }, { "x":22, "y":44 }, { "x":23, "y":46 }, { "x":24, "y":48 }, { "x":25, "y":50 }, { "x":26, "y":52 }, { "x":27, "y":54 }, { "x":28, "y":56 }, { "x":29, "y":58 }, { "x":30, "y":60 }, { "x":31, "y":62 }, { "x":32, "y":64 }, { "x":33, "y":66 }, { "x":34, "y":68 }, { "x":35, "y":70 }, { "x":36, "y":72 }, { "x":37, "y":74 }, { "x":38, "y":76 }, { "x":39, "y":78 }, { "x":40, "y":80 }, { "x":41, "y":82 }, { "x":42, "y":84 }, { "x":43, "y":86 }, { "x":44, "y":88 }, { "x":45, "y":90 }, { "x":46, "y":92 }, { "x":47, "y":94 }, { "x":48, "y":96 }, { "x":49, "y":98 }, { "x":50, "y":100 }, { "x":51, "y":102 }, { "x":52, "y":104 }, { "x":53, "y":106 }, { "x":54, "y":108 }, { "x":55, "y":110 }, { "x":56, "y":112 }, { "x":57, "y":114 }, { "x":58, "y":116 }, { "x":59, "y":118 }, { "x":60, "y":120 }, { "x":61, "y":122 }, { "x":62, "y":124 }, { "x":63, "y":126 }, { "x":64, "y":128 }, { "x":65, "y":130 }, { "x":66, "y":132 }, { "x":67, "y":134 }, { "x":68, "y":136 }, { "x":69, "y":138 }, { "x":70, "y":140 }, { "x":71, "y":142 }, { "x":72, "y":144 }, { "x":73, "y":146 }, { "x":74, "y":148 }, { "x":75, "y":150 }, { "x":76, "y":152 }, { "x":77, "y":154 }, { "x":78, "y":156 }, { "x":79, "y":158 }, { "x":80, "y":160 }, { "x":81, "y":162 }, { "x":82, "y":164 }, { "x":83, "y":166 }, { "x":84, "y":168 }, { "x":85, "y":170 }, { "x":86, "y":172 }, { "x":87, "y":174 }, { "x":88, "y":176 }, { "x":89, "y":178 }, { "x":90, "y":180 }, { "x":91, "y":182 }, { "x":92, "y":184 }, { "x":93, "y":186 }, { "x":94, "y":188 }, { "x":95, "y":190 }, { "x":96, "y":192 }, { "x":97, "y":194 }, { "x":98, "y":196 }, { "x":99, "y":198 } ]]} and what I want the variable scatterSeries to hold is a table like this one: [ { name:"graphe1", items:[ { x:8, y:2 }, { x:15, y:15 }, { x:25, y:26 }, { x:33, y:22 }, { x:36, y:40 } ]},] what I get in the console about the string ch is this: {"name":"graphe1","items":[{"x":0,"y":0},{"x":1,"y":2},{"x":2,"y":4},{"x":3,"y":6},{"x":4,"y":8},{"x":5,"y":10},{"x":6,"y":12},{"x":7,"y":14},{"x":8,"y":16},{"x":9,"y":18},{"x":10,"y":20},{"x":11,"y":22},{"x":12,"y":24},{"x":13,"y":26},{"x":14,"y":28},{"x":15,"y":30},{"x":16,"y":32},{"x":17,"y":34},{"x":18,"y":36},{"x":19,"y":38},{"x":20,"y":40},{"x":21,"y":42},{"x":22,"y":44},{"x":23,"y":46},{"x":24,"y":48},{"x":25,"y":50},{"x":26,"y":52},{"x":27,"y":54},{"x":28,"y":56},{"x":29,"y":58},{"x":30,"y":60},{"x":31,"y":62},{"x":32,"y":64},{"x":33,"y":66},{"x":34,"y":68},{"x":35,"y":70},{"x":36,"y":72},{"x":37,"y":74},{"x":38,"y":76},{"x":39,"y":78},{"x":40,"y":80},{"x":41,"y":82},{"x":42,"y":84},{"x":43,"y":86},{"x":44,"y":88},{"x":45,"y":90},{"x":46,"y":92},{"x":47,"y":94},{"x":48,"y":96},{"x":49,"y":98},{"x":50,"y":100},{"x":51,"y":102},{"x":52,"y":104},{"x":53,"y":106},{"x":54,"y":108},{"x":55,"y":110},{"x":56,"y":112},{"x":57,"y":114},{"x":58,"y":116},{"x":59,"y":118},{"x":60,"y":120},{"x":61,"y":122},{"x":62,"y":124},{"x":63,"y":126},{"x":64,"y":128},{"x":65,"y":130},{"x":66,"y":132},{"x":67,"y":134},{"x":68,"y":136},{"x":69,"y":138},{"x":70,"y":140},{"x":71,"y":142},{"x":72,"y":144},{"x":73,"y":146},{"x":74,"y":148},{"x":75,"y":150},{"x":76,"y":152},{"x":77,"y":154},{"x":78,"y":156},{"x":79,"y":158},{"x":80,"y":160},{"x":81,"y":162},{"x":82,"y":164},{"x":83,"y":166},{"x":84,"y":168},{"x":85,"y":170},{"x":86,"y":172},{"x":87,"y":174},{"x":88,"y":176},{"x":89,"y":178},{"x":90,"y":180},{"x":91,"y":182},{"x":92,"y":184},{"x":93,"y":186},{"x":94,"y":188},{"x":95,"y":190},{"x":96,"y":192},{"x":97,"y":194},{"x":98,"y":196},{"x":99,"y":198}]} Any help please?!! :( :(
You are calling: JSON.parse(scatterSeries) But when you defined scatterSeries, you said: var scatterSeries = []; When you try to parse it as JSON it is converted to a string (""), which is empty, so you reach the end of the string before having any of the possible content of a JSON text. scatterSeries is not JSON. Do not try to parse it as JSON. data is not JSON either (getJSON will parse it as JSON automatically). ch is JSON … but shouldn't be. You should just create a plain object in the first place: var ch = { "name": "graphe1", "items": data.results[1] }; scatterSeries.push(ch); In short, for what you are doing, you shouldn't have JSON.parse anywhere in your code. The only place it should be is in the jQuery library itself.
I was trying to debug this same error (I was writing code in TypeScript), but no matter what I did, the error didn't go away, it was really persistent. I tried to look into the solution in many blogs and also this SO thread. I tried everything and nothing worked out. Finally, I saw that I created the required file named products.json in which I gave a single extra newline (meaning, previously the file had 1 empty line, now it had 2 empty lines) and was following good GitHub practices as mentioned here. Because of that single extra newline in my products.json file, I wasted 2 hours fixing a bug that didn't exist in the first place. Finally when I deleted the entire products.json file and re-ran the entire thing, I didn't get any runtime errors and everything was running without any problems. What I learned by going through all this? It's that experience is the teacher of all things.
Remove this line from your code: console.info(JSON.parse(scatterSeries));
Issue is with the Json.parse of empty array - scatterSeries , as you doing console log of scatterSeries before pushing ch var data = { "results":[ [ { "b":"0.110547334", "cost":"0.000000", "w":"1.998889" } ], [ { "x":0, "y":0 }, { "x":1, "y":2 }, { "x":2, "y":4 }, { "x":3, "y":6 }, { "x":4, "y":8 }, { "x":5, "y":10 }, { "x":6, "y":12 }, { "x":7, "y":14 }, { "x":8, "y":16 }, { "x":9, "y":18 }, { "x":10, "y":20 }, { "x":11, "y":22 }, { "x":12, "y":24 }, { "x":13, "y":26 }, { "x":14, "y":28 }, { "x":15, "y":30 }, { "x":16, "y":32 }, { "x":17, "y":34 }, { "x":18, "y":36 }, { "x":19, "y":38 }, { "x":20, "y":40 }, { "x":21, "y":42 }, { "x":22, "y":44 }, { "x":23, "y":46 }, { "x":24, "y":48 }, { "x":25, "y":50 }, { "x":26, "y":52 }, { "x":27, "y":54 }, { "x":28, "y":56 }, { "x":29, "y":58 }, { "x":30, "y":60 }, { "x":31, "y":62 }, { "x":32, "y":64 }, { "x":33, "y":66 }, { "x":34, "y":68 }, { "x":35, "y":70 }, { "x":36, "y":72 }, { "x":37, "y":74 }, { "x":38, "y":76 }, { "x":39, "y":78 }, { "x":40, "y":80 }, { "x":41, "y":82 }, { "x":42, "y":84 }, { "x":43, "y":86 }, { "x":44, "y":88 }, { "x":45, "y":90 }, { "x":46, "y":92 }, { "x":47, "y":94 }, { "x":48, "y":96 }, { "x":49, "y":98 }, { "x":50, "y":100 }, { "x":51, "y":102 }, { "x":52, "y":104 }, { "x":53, "y":106 }, { "x":54, "y":108 }, { "x":55, "y":110 }, { "x":56, "y":112 }, { "x":57, "y":114 }, { "x":58, "y":116 }, { "x":59, "y":118 }, { "x":60, "y":120 }, { "x":61, "y":122 }, { "x":62, "y":124 }, { "x":63, "y":126 }, { "x":64, "y":128 }, { "x":65, "y":130 }, { "x":66, "y":132 }, { "x":67, "y":134 }, { "x":68, "y":136 }, { "x":69, "y":138 }, { "x":70, "y":140 }, { "x":71, "y":142 }, { "x":72, "y":144 }, { "x":73, "y":146 }, { "x":74, "y":148 }, { "x":75, "y":150 }, { "x":76, "y":152 }, { "x":77, "y":154 }, { "x":78, "y":156 }, { "x":79, "y":158 }, { "x":80, "y":160 }, { "x":81, "y":162 }, { "x":82, "y":164 }, { "x":83, "y":166 }, { "x":84, "y":168 }, { "x":85, "y":170 }, { "x":86, "y":172 }, { "x":87, "y":174 }, { "x":88, "y":176 }, { "x":89, "y":178 }, { "x":90, "y":180 }, { "x":91, "y":182 }, { "x":92, "y":184 }, { "x":93, "y":186 }, { "x":94, "y":188 }, { "x":95, "y":190 }, { "x":96, "y":192 }, { "x":97, "y":194 }, { "x":98, "y":196 }, { "x":99, "y":198 } ]]}; var scatterSeries = []; var ch = '{"name":"graphe1","items":'+JSON.stringify(data.results[1])+ '}'; console.info(ch); scatterSeries.push(JSON.parse(ch)); console.info(scatterSeries); code sample - https://codepen.io/nagasai/pen/GGzZVB
You define var scatterSeries = [];, and then try to parse it as a json string at console.info(JSON.parse(scatterSeries)); which obviously fails. The variable is converted to an empty string, which causes an "unexpected end of input" error when trying to parse it.
Encountered this error in the following function when I tried to pull 'nothing' from LS Quick fix for posterity const getUserFromLocalStorage = () => { try { return JSON.parse(localStorage.getItem('user') || ''); } catch (error) { return null; } };
In my case, using .NET 6, the problem was that the controller was declared as void and did not return any value. Simply changing the method declaration to int and adding return 0; solved this issue for me. [HttpPost] public int MyMethod(string text) { _logger.Log(text); return 0; }
This is because of the data that you are trying to parse is not in a parsable format . so i suggest to check the data is parsable or not before define the parse. const IsParsable = (data) => { try { JSON.parse(data); } catch (e) { return false; } return true; } var Obj= JSON.stringify({ "name": "graphe1", "items": data.results[1] }) return IsParsable (Obj) ? JSON.parse(Obj) : false
Serializing XML in JavaScript
I am consuming XML in express server parsing it with express-xml-bodyparser, but the resulting object is basically unusable. XML <SubClass code="A07.0"/> <SubClass code="A07.1"/> <SubClass code="A07.2"/> <SubClass code="A07.3"/> <SubClass code="A07.8"/> <SubClass code="A07.9"/> is serialized as JSON subclass: [ { '$': { code: 'A07.0' } }, { '$': { code: 'A07.1' } }, { '$': { code: 'A07.2' } }, { '$': { code: 'A07.3' } }, { '$': { code: 'A07.8' } }, { '$': { code: 'A07.9' } } ] Is there way to pase it directly into subclass: ['A07.0','A07.1','A07.2','A07.3','A07.8','A07.9'] or some easy way how to convert it into this array?
You can set mergeAttrs option to true in order to remove $ properties: xmlparser({ mergeAttrs: true, explicitArray: false}) Output: SubClass: [ { code: "A07.0" }, { code: "A07.1" }, { code: "A07.2" }, { code: "A07.3" }, { code: "A07.8" }, { code: "A07.9" } ] Or you can just use array.map() method: var data = { subclass: [ { '$': { code: 'A07.0' } }, { '$': { code: 'A07.1' } }, { '$': { code: 'A07.2' } }, { '$': { code: 'A07.3' } }, { '$': { code: 'A07.8' } }, { '$': { code: 'A07.9' } } ] }; var result = data.subclass.map( (obj) => { return obj.$.code; }); console.log(result);
If you want to convert json into an object then maybe something like... var arr = Object.keys(json).map(function(x) { return obj[x] }); With jQuery var arr = $.map(json, function(x) { return x});
JSON Formatting with javascript
Hello all I have a question. With this code: targetingIdeaService.get({selector: selector}, function (error, result) { var string = JSON.stringify(result) console.log(string) }) I get this result: "totalNumEntries":700, "entries":[ { "data":[ { "key":"KEYWORD_TEXT", "value":{ "attributes":{ "xsi:type":"StringAttribute" }, "Attribute.Type":"StringAttribute", "value":"nike ddd8ea95" } }, { "key":"COMPETITION", "value":{ "attributes":{ "xsi:type":"DoubleAttribute" }, "Attribute.Type":" DoubleAttribute", "value":"0.8726547440705715" } }, { "key":"AVERAGE_CPC", "value":{ "attributes":{ "xsi:type":"MoneyAttribute" }, "Attribute.Type":"MoneyAttribute", "value":{ "ComparableValue.Type":"Money", "microAmount":"16769286" } } }, { "key":"SEARCH_VOLUME", "value":{ "attributes":{ "x si:type":"LongAttribute" }, "Attribute.Type":"LongAttribute", "value":"5609289" } } ] } ] } And with this one i get the following: targetingIdeaService.get({selector: selector}, function (error, result) { var resultaten = result; var res = resultaten.entries; for(var i = 0; i < res.length; i++){ console.log(resultaten.entries[i]) } }) Output { data: [ { key: 'KEYWORD_TEXT', value: [Object] }, { key: 'COMPETITION', value: [Object] }, { key: 'AVERAGE_CPC', value: [Object] }, { key: 'SEARCH_VOLUME', value: [Object] } ] } Now im looking to format the JSON a certain way, It has to look like this example. Notice: the key value pairs of json data. [ { "KEYWORD_TEXT": "red herring 9e23f4ad", "SEARCH_VOLUME": 4574730 }, { "KEYWORD_TEXT": "nike 656e95f0", "SEARCH_VOLUME": 3442386 }, etc... ] Basically the Key and the value of that key next to eachother. How to do this?
You can map the keys to values like following - resultaten = result.data.map(function (item) { return { [item.key]: item.value } }); JSON.stringify(resultaten);