I'm trying to parse JSON in C++ with nlohmann/json library. But this library can't parse not formatted JSON.
I get an error:
libc++abi.dylib: terminating with uncaught exception of type nlohmann::detail::parse_error: [json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal
This JSON gives me an error:
{"1":{"row":{"last":"1.1857","ma":"Strong Sell","ma_class":"redFont","clock":"<span class=\"greenClockIcon\"> <\/span>"},"arrowBoxClass":"upArrow","summaryLast":"1.1857","summaryName":"EUR\/USD","summaryNameAlt":"EUR\/USD - Euro US Dollar","summaryChange":"+0.0056","summaryChangePercent":"+0.48","summaryChangeClass":"greenFont","technicalSummary":"Strong Sell","technicalSummaryClass":"sell","maBuy":2,"maSell":10,"tiBuy":0,"tiSell":7,"updateTime":null,"link":"\/currencies\/eur-usd"},"2":{"row":{"last":"1.3109","ma":"Strong Sell","ma_class":"redFont","clock":"<span class=\"greenClockIcon\"> <\/span>"},"arrowBoxClass":"upArrow","summaryLast":"1.3109","summaryName":"GBP\/USD","summaryNameAlt":"GBP\/USD - British Pound US Dollar","summaryChange":"+0.0049","summaryChangePercent":"+0.37","summaryChangeClass":"greenFont","technicalSummary":"Strong Sell","technicalSummaryClass":"sell","maBuy":0,"maSell":12,"tiBuy":0,"tiSell":7,"updateTime":null,"link":"\/currencies\/gbp-usd"},"3":{"row":{"last":"105.64","ma":"Strong Buy","ma_class":"greenFont","clock":"<span class=\"greenClockIcon\"> <\/span>"},"arrowBoxClass":"downArrow","summaryLast":"105.64","summaryName":"USD\/JPY","summaryNameAlt":"USD\/JPY - US Dollar Japanese Yen","summaryChange":"-0.07","summaryChangePercent":"-0.06","summaryChangeClass":"redFont","technicalSummary":"Strong Buy","technicalSummaryClass":"buy","maBuy":12,"maSell":0,"tiBuy":9,"tiSell":0,"updateTime":null,"link":"\/currencies\/usd-jpy"},"5":{"row":{"last":"0.7189","ma":"Strong Sell","ma_class":"redFont","clock":"<span class=\"greenClockIcon\"> <\/span>"},"arrowBoxClass":"upArrow","summaryLast":"0.7189","summaryName":"AUD\/USD","summaryNameAlt":"AUD\/USD - Australian Dollar US Dollar","summaryChange":"+0.0029","summaryChangePercent":"+0.40","summaryChangeClass":"greenFont","technicalSummary":"Strong Sell","technicalSummaryClass":"sell","maBuy":0,"maSell":12,"tiBuy":0,"tiSell":8,"updateTime":null,"link":"\/currencies\/aud-usd"},"7":{"row":{"last":"1.3278","ma":"Buy","ma_class":"greenFont","clock":"<span class=\"greenClockIcon\"> <\/span>"},"arrowBoxClass":"downArrow","summaryLast":"1.3278","summaryName":"USD\/CAD","summaryNameAlt":"USD\/CAD - US Dollar Canadian Dollar","summaryChange":"-0.0039","summaryChangePercent":"-0.29","summaryChangeClass":"redFont","technicalSummary":"Buy","technicalSummaryClass":"buy","maBuy":11,"maSell":1,"tiBuy":3,"tiSell":3,"updateTime":null,"link":"\/currencies\/usd-cad"},"9":{"row":{"last":"125.25","ma":"Strong Sell","ma_class":"redFont","clock":"<span class=\"greenClockIcon\"> <\/span>"},"arrowBoxClass":"upArrow","summaryLast":"125.25","summaryName":"EUR\/JPY","summaryNameAlt":"EUR\/JPY - Euro Japanese Yen","summaryChange":"+0.51","summaryChangePercent":"+0.40","summaryChangeClass":"greenFont","technicalSummary":"Strong Sell","technicalSummaryClass":"sell","maBuy":2,"maSell":10,"tiBuy":0,"tiSell":9,"updateTime":null,"link":"\/currencies\/eur-jpy"},"10":{"row":{"last":"1.0777","ma":"Strong Buy","ma_class":"greenFont","clock":"<span class=\"greenClockIcon\"> <\/span>"},"arrowBoxClass":"upArrow","summaryLast":"1.0777","summaryName":"EUR\/CHF","summaryNameAlt":"EUR\/CHF - Euro Swiss Franc","summaryChange":"+0.0003","summaryChangePercent":"+0.03","summaryChangeClass":"greenFont","technicalSummary":"Strong Buy","technicalSummaryClass":"buy","maBuy":12,"maSell":0,"tiBuy":5,"tiSell":2,"updateTime":null,"link":"\/currencies\/eur-chf"}}
But nlohmann works fine with JSON like this:
{
"1": {
"row": {
"last": "1.1857",
"ma": "Strong Sell",
"ma_class": "redFont",
"clock": "<span class=\"greenClockIcon\"> <\\/span>"
},
"arrowBoxClass": "upArrow",
"summaryLast": "1.1857",
"summaryName": "EUR\\/USD",
"summaryNameAlt": "EUR\\/USD - Euro US Dollar",
"summaryChange": "+0.0056",
"summaryChangePercent": "+0.48",
"summaryChangeClass": "greenFont",
"technicalSummary": "Strong Sell",
"technicalSummaryClass": "sell",
"maBuy": 2,
"maSell": 10,
"tiBuy": 0,
"tiSell": 7,
"updateTime": null,
"link": "\\/currencies\\/eur-usd"
},
"2": {
"row": {
"last": "1.3109",
"ma": "Strong Sell",
"ma_class": "redFont",
"clock": "<span class=\"greenClockIcon\"> <\\/span>"
},
"arrowBoxClass": "upArrow",
"summaryLast": "1.3109",
"summaryName": "GBP\\/USD",
"summaryNameAlt": "GBP\\/USD - British Pound US Dollar",
"summaryChange": "+0.0049",
"summaryChangePercent": "+0.37",
"summaryChangeClass": "greenFont",
"technicalSummary": "Strong Sell",
"technicalSummaryClass": "sell",
"maBuy": 0,
"maSell": 12,
"tiBuy": 0,
"tiSell": 7,
"updateTime": null,
"link": "\\/currencies\\/gbp-usd"
},
"3": {
"row": {
"last": "105.64",
"ma": "Strong Buy",
"ma_class": "greenFont",
"clock": "<span class=\"greenClockIcon\"> <\\/span>"
},
"arrowBoxClass": "downArrow",
"summaryLast": "105.64",
"summaryName": "USD\\/JPY",
"summaryNameAlt": "USD\\/JPY - US Dollar Japanese Yen",
"summaryChange": "-0.07",
"summaryChangePercent": "-0.06",
"summaryChangeClass": "redFont",
"technicalSummary": "Strong Buy",
"technicalSummaryClass": "buy",
"maBuy": 12,
"maSell": 0,
"tiBuy": 9,
"tiSell": 0,
"updateTime": null,
"link": "\\/currencies\\/usd-jpy"
},
"5": {
"row": {
"last": "0.7189",
"ma": "Strong Sell",
"ma_class": "redFont",
"clock": "<span class=\"greenClockIcon\"> <\\/span>"
},
"arrowBoxClass": "upArrow",
"summaryLast": "0.7189",
"summaryName": "AUD\\/USD",
"summaryNameAlt": "AUD\\/USD - Australian Dollar US Dollar",
"summaryChange": "+0.0029",
"summaryChangePercent": "+0.40",
"summaryChangeClass": "greenFont",
"technicalSummary": "Strong Sell",
"technicalSummaryClass": "sell",
"maBuy": 0,
"maSell": 12,
"tiBuy": 0,
"tiSell": 8,
"updateTime": null,
"link": "\\/currencies\\/aud-usd"
},
"7": {
"row": {
"last": "1.3278",
"ma": "Buy",
"ma_class": "greenFont",
"clock": "<span class=\"greenClockIcon\"> <\\/span>"
},
"arrowBoxClass": "downArrow",
"summaryLast": "1.3278",
"summaryName": "USD\\/CAD",
"summaryNameAlt": "USD\\/CAD - US Dollar Canadian Dollar",
"summaryChange": "-0.0039",
"summaryChangePercent": "-0.29",
"summaryChangeClass": "redFont",
"technicalSummary": "Buy",
"technicalSummaryClass": "buy",
"maBuy": 11,
"maSell": 1,
"tiBuy": 3,
"tiSell": 3,
"updateTime": null,
"link": "\\/currencies\\/usd-cad"
},
"9": {
"row": {
"last": "125.25",
"ma": "Strong Sell",
"ma_class": "redFont",
"clock": "<span class=\"greenClockIcon\"> <\\/span>"
},
"arrowBoxClass": "upArrow",
"summaryLast": "125.25",
"summaryName": "EUR\\/JPY",
"summaryNameAlt": "EUR\\/JPY - Euro Japanese Yen",
"summaryChange": "+0.51",
"summaryChangePercent": "+0.40",
"summaryChangeClass": "greenFont",
"technicalSummary": "Strong Sell",
"technicalSummaryClass": "sell",
"maBuy": 2,
"maSell": 10,
"tiBuy": 0,
"tiSell": 9,
"updateTime": null,
"link": "\\/currencies\\/eur-jpy"
},
"10": {
"row": {
"last": "1.0777",
"ma": "Strong Buy",
"ma_class": "greenFont",
"clock": "<span class=\"greenClockIcon\"> <\\/span>"
},
"arrowBoxClass": "upArrow",
"summaryLast": "1.0777",
"summaryName": "EUR\\/CHF",
"summaryNameAlt": "EUR\\/CHF - Euro Swiss Franc",
"summaryChange": "+0.0003",
"summaryChangePercent": "+0.03",
"summaryChangeClass": "greenFont",
"technicalSummary": "Strong Buy",
"technicalSummaryClass": "buy",
"maBuy": 12,
"maSell": 0,
"tiBuy": 5,
"tiSell": 2,
"updateTime": null,
"link": "\\/currencies\\/eur-chf"
}
}
Is there a way to format JSON from first format to the second one in C++ code? Without using websites. Maybe there's a library for this, or it's achievable with just C++ or STL.
The problem isn't connected with nlohmann code. It works fine.
The problem is that I download that JSON and try to parse it in one program. The problem was that I create file with this code:
FILE* file = fopen(path, "w");
And I don't close it after. The problem was I tried to parse not closed file.
I added:
fclose(file);
Before trying to parse. And it all worked!
I tried the same code to parse file which I downloaded some time ago, and it worked as it should.