Hallo,
ich habe eine Methode welche aus verschiedene Datenbank Tabellen verschiedene Daten liefert (Systeme und die dazugehörigen Stationen ). Das Problem ist das ein System mehrer Stationen beherbergen kann. Dadurch wird mein JSONArray falsch zusammengebaut.
Ich weiß jedoch noch nicht so recht wie ich das Umbauen kann.
Zuerst dachte ich das ich mir immer das JSONObject hole und schaue ob es das schon gibt aber dann muss ich jedesmal durch alle JSONObjecte durchgehen und schauen ob es das schon gibt.
Vielleicht habt ihr ja Ideen oder Vorschläge.
So sieht mein JSON, für ein einzelnes System derzeit aus:
Allerdings sollte es so aussehen:
Mein Code:
Ich hoffe ihr versteht was ich meine und könnt mir helfen.
Wenn etwas Fehlt schreibt einfach.
Mit freundlichen Grüßen
Niclas
ich habe eine Methode welche aus verschiedene Datenbank Tabellen verschiedene Daten liefert (Systeme und die dazugehörigen Stationen ). Das Problem ist das ein System mehrer Stationen beherbergen kann. Dadurch wird mein JSONArray falsch zusammengebaut.
Ich weiß jedoch noch nicht so recht wie ich das Umbauen kann.
Zuerst dachte ich das ich mir immer das JSONObject hole und schaue ob es das schon gibt aber dann muss ich jedesmal durch alle JSONObjecte durchgehen und schauen ob es das schon gibt.
Vielleicht habt ihr ja Ideen oder Vorschläge.
So sieht mein JSON, für ein einzelnes System derzeit aus:
Code:
[
{
"Stations": [
{
"StationName": "Galileo",
"LandingPadSize": "L",
"MarketUpdatet": 1549594652,
"DistandeToStar": 501,
"Planetary": false,
"Supply": 81738,
"BuyPrice": 9079
}
],
"CommodityID": 42,
"SystemName": "Sol",
"NeedsPermit": true,
"Distance": 0
},
{
"Stations": [
{
"StationName": "Daedalus",
"LandingPadSize": "L",
"MarketUpdatet": 1549597578,
"DistandeToStar": 211,
"Planetary": false,
"Supply": 123797,
"BuyPrice": 9079
}
],
"CommodityID": 42,
"SystemName": "Sol",
"NeedsPermit": true,
"Distance": 0
},
{
"Stations": [
{
"StationName": "Columbus",
"LandingPadSize": "L",
"MarketUpdatet": 1549587077,
"DistandeToStar": 2490,
"Planetary": false,
"Supply": 879,
"BuyPrice": 9828
}
],
"CommodityID": 42,
"SystemName": "Sol",
"NeedsPermit": true,
"Distance": 0
},
{
"Stations": [
{
"StationName": "Titan City",
"LandingPadSize": "L",
"MarketUpdatet": 1549555633,
"DistandeToStar": 5041,
"Planetary": false,
"Supply": 157,
"BuyPrice": 10044
}
],
"CommodityID": 42,
"SystemName": "Sol",
"NeedsPermit": true,
"Distance": 0
},
{
"Stations": [
{
"StationName": "Burnell Station",
"LandingPadSize": "M",
"MarketUpdatet": 1549575902,
"DistandeToStar": 359,
"Planetary": false,
"Supply": 433,
"BuyPrice": 9571
}
],
"CommodityID": 42,
"SystemName": "Sol",
"NeedsPermit": true,
"Distance": 0
}
]
Allerdings sollte es so aussehen:
Code:
[
{
"Stations": [
{
"StationName": "Galileo",
"LandingPadSize": "L",
"MarketUpdatet": 1549594652,
"DistandeToStar": 501,
"Planetary": false,
"Supply": 81738,
"BuyPrice": 9079
},
{
"StationName": "Daedalus",
"LandingPadSize": "L",
"MarketUpdatet": 1549597578,
"DistandeToStar": 211,
"Planetary": false,
"Supply": 123797,
"BuyPrice": 9079
},
{
"StationName": "Columbus",
"LandingPadSize": "L",
"MarketUpdatet": 1549587077,
"DistandeToStar": 2490,
"Planetary": false,
"Supply": 879,
"BuyPrice": 9828
},
{
"StationName": "Titan City",
"LandingPadSize": "L",
"MarketUpdatet": 1549555633,
"DistandeToStar": 5041,
"Planetary": false,
"Supply": 157,
"BuyPrice": 10044
},
{
"StationName": "Burnell Station",
"LandingPadSize": "M",
"MarketUpdatet": 1549575902,
"DistandeToStar": 359,
"Planetary": false,
"Supply": 433,
"BuyPrice": 9571
}
],
"CommodityID": 42,
"SystemName": "Sol",
"NeedsPermit": true,
"Distance": 0
}
//Nächstes System
]
Mein Code:
Java:
public void getAllData( String currentSystemName, int radius, boolean inkSystemsWithPermissions,
boolean inkPlanetaryStations,
String commodityName, int count, double multiplayer, int maxAge )
{
JSONArray jsonArray = new JSONArray();
double demand = count * multiplayer;
int minDemand = (int)demand;
//TODO UnixTime soll nicht von jetzt sondern von 00:00 zählen.
long unixTime = System.currentTimeMillis() / 1000L;
long maxCommodityAge = unixTime - TimeUnit.DAYS.toSeconds( maxAge );
int commodityID = commodityMapping.mapping( commodityName );
String sqlOtherSystems = null;
if( inkSystemsWithPermissions == true && inkPlanetaryStations == true )
{
sqlOtherSystems = SQL_SELECT_OTHER_SYSTEMS_TRUE_TRUE;
}
if( inkSystemsWithPermissions == true && inkPlanetaryStations == false )
{
sqlOtherSystems = SQL_SELECT_OTHER_SYSTEMS_TRUE_FALSE;
}
if( inkSystemsWithPermissions == false && inkPlanetaryStations == false )
{
sqlOtherSystems = SQL_SELECT_OTHER_SYSTEMS_FALSE_FALSE;
}
if( inkSystemsWithPermissions == false && inkPlanetaryStations == true )
{
sqlOtherSystems = SQL_SELECT_OTHER_SYSTEMS_FALSE_TRUE;
}
Connection connection = databaseHandler.connect();
try (PreparedStatement pscs = connection.prepareStatement( SQL_SELECT_CURRENT_SYSTEM ))
{
pscs.setString( 1, currentSystemName );
ResultSet rscs = pscs.executeQuery();
float x_pos = rscs.getFloat( "x_pos" );
float y_pos = rscs.getFloat( "y_pos" );
float z_pos = rscs.getFloat( "z_pos" );
try (PreparedStatement psos = connection.prepareStatement( sqlOtherSystems ))
{
psos.setInt( 1, commodityID );
psos.setInt( 2, minDemand );
psos.setLong( 3, maxCommodityAge );
ResultSet rsos = psos.executeQuery();
while( rsos.next() )
{
float x_pos2 = rsos.getFloat( "x_pos" );
float y_pos2 = rsos.getFloat( "y_pos" );
float z_pos2 = rsos.getFloat( "z_pos" );
double x = x_pos - x_pos2;
double y = y_pos - y_pos2;
double z = z_pos - z_pos2;
double result = Math.sqrt( Math.pow( x, 2 ) + Math.pow( y, 2 ) + Math.pow( z, 2 ) );
if( result <= radius )
{
JSONObject jsonObject = new JSONObject();
JSONObject jsonObjectStation = new JSONObject();
JSONArray jsonArrayStations = new JSONArray();
jsonObject.put( "SystemName", rsos.getString( "system_name" ) );
jsonObject.put( "Distance", result );
jsonObject.put( "NeedsPermit", rsos.getBoolean( "needs_permit" ) );
jsonObject.put( "CommodityID", rsos.getInt( "commodity_id" ) );
jsonObjectStation.put( "StationName", rsos.getString( "station_name" ) );
jsonObjectStation.put( "LandingPadSize", rsos.getString( "max_landing_pad_size" ) );
jsonObjectStation.put( "DistandeToStar", rsos.getLong( "distance_to_star" ) );
jsonObjectStation.put( "MarketUpdatet", rsos.getLong( "market_updated_at" ) );
jsonObjectStation.put( "Planetary", rsos.getBoolean( "is_planetary" ) );
jsonObjectStation.put( "Supply", rsos.getLong( "supply" ) );
jsonObjectStation.put( "BuyPrice", rsos.getInt( "buy_price" ) );
jsonArrayStations.put( jsonObjectStation );
jsonArray.put( jsonObject );
jsonObject.put( "Stations", jsonArrayStations );
}
}
}
catch( SQLException e )
{
e.printStackTrace();
}
}
catch( SQLException e )
{
systemLogger.info( className, e.getMessage() );
}
SortSystems sortSystems = new SortSystems();
List<JSONObject> sortedList = sortSystems.sortSystems( jsonArray );
systemLogger.info( className, sortedList.toString() );
}
Ich hoffe ihr versteht was ich meine und könnt mir helfen.
Wenn etwas Fehlt schreibt einfach.
Mit freundlichen Grüßen
Niclas