Back in may 2013, I was working on a school project concerning mobile networks. So this is what I wrote one year ago while I was fighting with handover algorithm and research papers.
I’m currently building a project to simulate handover decision process in GSM/UMTS. To be able to perform the simulation, I need some parameters like mobile gain, loss, coordinates as well as informations about antennas. I’ve chose to provide these parameters to the program using a json file. So I needed to find a way to get informations from the file and parse the json in java.
I used a JSON-Java library to initialized data. Here is the code needed to parse the json belove. The jsonStr variable contains our json file as a string.
JSONObject obj = new JSONObject(jsonStr);
JSONObject objMobile = obj.getJSONObject("mobile");
JSONArray arrayPath = objMobile.getJSONArray("path");
cro = obj.getDouble("cro");
rxLevAccMin = obj.getDouble("rxlevaccmin");
msTxPwrMaxCCH = obj.getDouble("msTxPwrMaxCCH");
//Initialize Mobile Station
for(int i = 0; i < arrayPath.length(); ++i) {
JSONObject el = arrayPath.getJSONObject(i);
journey.add(new Coordinate(el.getInt("x"), el.getInt("y")) );
}
mobileStation = new Mobile(objMobile.getDouble("gain"),
objMobile.getDouble("loss"), objMobile.getDouble("classPower"),
journey, objMobile.getBoolean("voice"), 6, -102, journey.get(0));
//Initialize Antennas
JSONArray arrayAntenna = obj.getJSONArray("antenna");
for(int j = 0; j < arrayAntenna.length(); ++j) {
JSONObject el = arrayAntenna.getJSONObject(j);
Coordinate position = new Coordinate(el.getInt("x"), el.getInt("y"));
antennaList.add(new Antenna(el.getInt("type"), position,
el.getDouble("gain"), el.getDouble("loss"), el.getDouble("power"),
el.getDouble("frequency"), el.getDouble("coef")));
}
Once our json string has been parsed to a json object, we can extract data using:
- getJSONObject
- getJSONArray
- getBoolean
- getInt
- getDouble
Here is the json file:
{
"rxlevaccmin": -96,
"cro": 0.0,
"msTxPwrMaxCCH": 33,
"mobile": {
"gain": 0, "loss": 0,
"classPower": 33,
"voice": false,
"path": [
{"x": 11, "y": 0},
{"x": 14, "y": 0},
{"x": 16, "y": 0},
{"x": 18, "y": 0},
{"x": 20, "y": 0},
{"x": 24, "y": 0},
{"x": 25, "y": 0},
{"x": 26, "y": 0}
]
},
"antenna": [
{
"type": 0,
"x": 0, "y": 0,
"power": 20,
"gain": 0, "loss": 0,
"frequency": 900,
"coef": 1
},
{
"type": 1,
"x": 30, "y": 0,
"power": 10,
"gain": 0, "loss": 0,
"frequency": 900,
"coef": 1
},
{
"type": 0,
"x": 20, "y": 5,
"power": 12,
"gain": 0, "loss": 0,
"frequency": 900,
"coef": 1
}
]
}
It’s funny to compare this with the one-line-way to parse json in Node.Js:
var jsonObject = require('jsonFileName');
var classPower =jsonObject.mobile.classPower