I'm following the tutorial for using jsonpath (https://www.baeldung.com/guide-to-jayway-jsonpath) and using the endpoint https://api.binance.com/api/v3/exchangeInfo I'm attempting to parse the value LOT_SIZE, stepSize for the symbol TRXEUR. The specific piece of JSON contained in the returned payload is contained in:
{
"symbol": "TRXEUR",
"status": "TRADING",
"baseAsset": "TRX",
"baseAssetPrecision": 8,
"quoteAsset": "EUR",
"quotePrecision": 8,
"quoteAssetPrecision": 8,
"baseCommissionPrecision": 8,
"quoteCommissionPrecision": 8,
"orderTypes": [
"LIMIT",
"LIMIT_MAKER",
"MARKET",
"STOP_LOSS_LIMIT",
"TAKE_PROFIT_LIMIT"
],
"icebergAllowed": true,
"ocoAllowed": true,
"quoteOrderQtyMarketAllowed": true,
"isSpotTradingAllowed": true,
"isMarginTradingAllowed": false,
"filters": [
{
"filterType": "PRICE_FILTER",
"minPrice": "0.00010000",
"maxPrice": "1000.00000000",
"tickSize": "0.00010000"
},
{
"filterType": "PERCENT_PRICE",
"multiplierUp": "5",
"multiplierDown": "0.2",
"avgPriceMins": 5
},
{
"filterType": "LOT_SIZE",
"minQty": "1.00000000",
"maxQty": "90000000.00000000",
"stepSize": "1.00000000"
},
{
"filterType": "MIN_NOTIONAL",
"minNotional": "10.00000000",
"applyToMarket": true,
"avgPriceMins": 5
},
{
"filterType": "ICEBERG_PARTS",
"limit": 10
},
{
"filterType": "MARKET_LOT_SIZE",
"minQty": "0.00000000",
"maxQty": "904859.10069444",
"stepSize": "0.00000000"
},
{
"filterType": "MAX_NUM_ORDERS",
"maxNumOrders": 200
},
{
"filterType": "MAX_NUM_ALGO_ORDERS",
"maxNumAlgoOrders": 5
}
],
"permissions": [
"SPOT"
]
}
More specifically how to extract 1.00000000
from :
{
"filterType": "LOT_SIZE",
"minQty": "1.00000000",
"maxQty": "90000000.00000000",
"stepSize": "1.00000000"
}
Here is what I've written :
public class ParseJson {
public static void main(String[] args) {
try {
URL url = new URL("https://api.binance.com/api/v3/exchangeInfo");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer content = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
final String jsonString = content.toString();
List<Object> dataObject = JsonPath.parse(jsonString).read("symbols");
dataObject.forEach(x -> {
if (x.toString().toUpperCase().contains("TRXEUR")) {
List<Object> lo = JsonPath.parse(x.toString()).read("symbol");
}
}
);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Which returns :
20:52:10.428 [main] DEBUG com.jayway.jsonpath.internal.path.CompiledPath - Evaluating path: $['symbols']
20:52:10.469 [main] DEBUG com.jayway.jsonpath.internal.path.CompiledPath - Evaluating path: $['symbol']
Exception in thread "main" com.jayway.jsonpath.PathNotFoundException: No results for path: $['symbol']
at com.jayway.jsonpath.internal.path.EvaluationContextImpl.getValue(EvaluationContextImpl.java:133)
at com.jayway.jsonpath.JsonPath.read(JsonPath.java:187)
at com.jayway.jsonpath.internal.JsonContext.read(JsonContext.java:102)
at com.jayway.jsonpath.internal.JsonContext.read(JsonContext.java:89)
at com.reactive.api.scenarios.ParseJson.lambda$main$0(ParseJson.java:37)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
at com.reactive.api.scenarios.ParseJson.main(ParseJson.java:34)
Process finished with exit code 1
I can access the symbol TRXEUR
and symbols
is parsed but how to extract 1.00000000
from :
{
"filterType": "LOT_SIZE",
"minQty": "1.00000000",
"maxQty": "90000000.00000000",
"stepSize": "1.00000000"
}
?
From https://jsonpath.herokuapp.com/
$.filters[?(@.filterType=='LOT_SIZE')].stepSize