Parsing a JSON with Javascript yields undefined - javascript

I am hitting a test API I built with jQuery which gives me a JSON.
In my Javascript, I am doing the following:
var myjson = (getData['responseJSON']['results']);
console.log(myjson);
This yields the below results:
{"A":{"0":1,"1":2},"B":{"0":2,"1":3},"C":{"0":3,"1":4}}
I would like to instead just return the values for A, which I assumed would just be like below. But when I do this I get undefined. What am I doing wrong here?
var myjson = (getData['responseJSON']['results']['A']);
console.log(myjson);

var myjson = JSON.parse(getData['responseJSON']['results']);
console.log(myjson['A']);

Related

how to modify json response in react native

I have a JSON response like this
const json = '{"arr":[{"key1": "value1"},{"key2": "value2"}], "m":[{"key3": "value3"},{"key4": "value4"}], "b":[{"key5": "value5"},{"key6": "value6"}]}'
I need an array like this
const array = [{"key1": "value1"},{"key2": "value2"},{"key3": "value3"},{"key4": "value4"},{"key5": "value5"},{"key6": "value6"}]
how can I achieve that?
Tough to test with the data you supplied as it is neither valid JSON or valid JS objects. But generally speaking you want to go inside an object and spread all its keys' values. Here is the code to do that:
const json = '{"arr":[{"key1": "value1"},{"key2": "value2"}], "m":[{"key3": "value3"},{"key4": "value4"}], "b":[{"key5": "value5"},{"key6": "value6"}]}'
const obj = JSON.parse(json);
const result = [];
Object.values(obj).map(item => result.push(...item))
console.log(result);
Again, I had to create a valid JSON string for it to work.
Also, please note that this is not a valid JS array: [{1},{2},{3},{4},{5},{6}]

Extract Data Values from JSON ouput

I am new to JSON and concepts. I want to extract the data from an API which i have mentioned below, basically i want to extract several details from this API about an Stock. The problem here is, after parsing the URL i dont know how to extract the value for each variablle.
I want to extract the data into an GoogleSheet.
the output of the below function shows, like this
[20-12-10 20:45:15:806 CET] [{symbol=JMIA, price=37.0497, volume=1.317713E7}]
The output i wanted is that:
JMIA
37.0497
1.317713E7
Code :
function CurrentPrice() {
var url = 'https://financialmodelingprep.com/api/v3/quote-short/JMIA?
apikey=7c2f5bcb573b33050c1aad41a54919';
var response = UrlFetchApp.fetch(url);
// convert json string to json object
var jsonSignal = JSON.parse(response);
Logger.log(jsonSignal);
}
I suggest you read this "Working with Objects" article.
The response is wrapped in brackets [] meaning it's an array. I assume you're only expecting one response, so you can grab that first element using jsonSignal[0], which will give you an object.
To get an object property, you have to specify the property name using either dot- or bracket-notation. (I'll use dot-notation.)
const jsonSignal = [{symbol:'JMIA', price:37.0497, volume:1.317713E7}];
console.log(jsonSignal[0].symbol); // 'JMIA'
function CurrentPrice() {
const url = 'https://financialmodelingprep.com/api/v3/quote-short/JMIA?apikey=API_KEY';
const response = UrlFetchApp.fetch(url);
// Convert HTTPResponse
// Use the first element in the response array
const signal = JSON.parse(response)[0];
console.log(signal.symbol); // 'JMIA'
console.log(signal.price); // 37.0497
console.log(signal.volume); // 1.317713E7
}
Try like this :
var json = response.getContentText();
var data = JSON.parse(json);
Logger.log(data);
I read that there : https://developers.google.com/apps-script/guides/services/external
Regards

Laravel JSON parsing issue in blade

While assigning JSON in blade produces a JavaScript syntax error. There is two different cases:
First Case
var jsonString = {!! $json !!}; //it produce syntax error
It produce syntax error in some cases
Second Case
var jsonString = JSON.parse("{!! $json !!}");
It produce error while null or empty
Unexpected end of JSON input
Is there any way that handle both situations?
var jsonString = JSON.parse("{!! json_encode($json) !!}");
It is working for me.
Please try like this -
var json_res = "{{$json}}";
var jsonString = JSON.parse(json_res);
Hope this will help you.
You can achieve this using this way:
var json = null;
try {
var json = JSON.parse('<?=str_replace('\'','\\\'', $json);?>');
} catch(SyntaxError) {
// Do something If the json string is not a valid json.
}

Counting records in JSON array using javascript and Postman

I have a control that returns 2 records:
{
"value": [
{
"ID": 5,
"Pupil": 1900031265,
"Offer": false,
},
{
"ID": 8,
"Pupil": 1900035302,
"Offer": false,
"OfferDetail": ""
}
]
}
I need to test via Postman, that I have 2 records returned. I've tried various methods I've found here and elsewhere but with no luck. Using the code below fails to return the expected answer.
responseJson = JSON.parse(responseBody);
var list = responseBody.length;
tests["Expected number"] = list === undefined || list.length === 2;
At this point I'm not sure if it's the API I'm testing that's at fault or my coding - I've tried looping through the items returned but that's not working for me either. Could someone advise please - I'm new to javascript so am expecting there to be an obvious cause to my problem but I'm failing to see it. Many thanks.
In postman, under Tests section, do the following (screenshot below):
var body = JSON.parse(responseBody);
tests["Count: " + body.value.length] = true;
Here is what you should see (note: I replaced responseBody with JSON to mock up example above):
Correct your json. and try this.
=======================v
var test = JSON.parse('{"value": [{"ID": 5,"Pupil": 1900031265,"Offer": false},{"ID": 8,"Pupil": 1900035302,"Offer": false,"OfferDetail": ""}] }')
test.value.length; // 2
So you need to identify the array in the json (starting with the [ bracket. and then take the key and then check the length of the key.
Here's the simplest way I figured it out:
pm.expect(Object.keys(pm.response.json()).length).to.eql(18);
No need to customize any of that to your variables. Just copy, paste, and adjust "18" to whatever number you're expecting.
This is what I did for counting the recods
//parsing the Response body to a variable
responseJson = JSON.parse(responseBody);
//Finding the length of the Response Array
var list = responseJson.length;
console.log(list);
tests["Validate service retuns 70 records"] = list === 70;
More updated version of asserting only 2 objects in an array:
pm.test("Only 2 objects in array", function (){
pm.expect(pm.response.json().length).to.eql(2);
});
Your response body is an object you cannot find the length of an object try
var list = responseJson.value.length;
First of all you should convert response to json and find value path. Value is array. You should call to length function to get how many objects in there and check your expected size
pm.test("Validate value count", function () {
pm.expect(pm.response.json().value.length).to.eq(2);
});
I had a similar problem, what I used to test for a certain number of array members is:
responseJson = JSON.parse(responseBody);
tests["Response Body = []"] = responseJson.length === valueYouAreCheckingFor;
To check what values you're getting, print it and check the postman console.
console.log(responseJson.length);
Counting records in JSON array using javascript and insomnia
//response insomnia
const response = await insomnia.send();
//Parse Json
const body = JSON.parse(response.data);
//Print console:
console.log(body.data.records.length);
pm.test("Only 2 objects in array", function (){
var jsonData = pm.response.json();
let event_length = jsonData.data.length;
pm.expect(event_length).to.eql(2);
});
As mentioned in the comments, you should test responseJson.value.length
responseJson = JSON.parse(responseBody);
tests["Expected number"] = typeof responseJson === 'undefined' || responseJson.value.length;
I was facing similar issue while validating the length of an array inside a JSON. The below snippet should help you resolve it-
responseJson = JSON.parse(responseBody);
var list = responseBody.length;
tests["Expected number"] = responseJson.value.length === list;
Working Code
pm.test("Verify the number of records",function()
{
var response = JSON.parse(responseBody);
pm.expect(Object.keys(response.value).length).to.eql(5);
});
//Please change the value in to.eql function as per your requirement
//'value' is the JSON notation name for this example and can change as per your JSON

Why JSON.parse not working on this string?

This is an object :-
var query = {id : "1"};
I encoded it : encodeURIComponent(JSON.stringify(query))
and got result : "%7B%22id%22%3A%221%22%7D"
I decoded it and store in lets say dquery..
var dqeury = decodeURIComponent("%7B%22id%22%3A%221%22%7D")
when i print JSON.parse(dqeury) // it worked, here dqeury = "{"id":"1"}"
but the same thing when i done on node api, JSON.parse will throw an error. when i console the dquery there i get exactly same as before.
How should i parse this??

Categories