Есть 2 json-файла. Необходимо преобразовать их массивы, сравнить некоторые параметры, преобразовать 1-ый массив и создать на основе него 3-ий json-файл.
Нужно выполнить похожее на Java, но в нем я далеко не бум-бум. Подскажите с чего начать, куда что и как. Как именно загнать json в массив или коллекцию?
P.S. либо можете указать на ошибки в PHP коде. проблема в существующем коде: в обоих json'ах по 50к элементов features[$i]. Т.е. если задавать оба цикла до 50к - заканчивается память. Получается обработать только по 5-8к элементов.
На PHP рабочий код выглядел так:
$d1 = file_get_contents('1.geojson');
$j1 = json_decode($d1);
$d2 = file_get_contents('2.geojson');
$j2 = json_decode($d2);
for ($i=0; $i<5000; $i++)
{
for ($k=0; $k<5000; $k++)
{
if ($j1->features[$i]->properties->CITY == $j2->features[$k]->properties->CITY)
{
if ($j1->features[$i]->properties->STREET == $j2->features[$k]->properties->STREET)
{
if ($j1->features[$i]->properties->HOUSE_N == $j2->features[$k]->properties->HOUSE_N)
{
$j1->features[$i]->properties->Count = $j2->features[$k]->properties->Count;
$i++;
$j=0;
}
}
}
}
}
$r = json_encode($j1);
file_put_contents('result.geojson', $r);
Кусок самого json'а:
{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{ "type": "Feature", "properties": { "ObjectName": "ОТДЕЛЬНЫЕ СТРОЕН", "LayerName": "houses", "ObjectCode": "44200000", "HOUSE_N": "21", "STREET": "Киреева", "KORPUS": null, "TYP_COD": 19.0, "COUNTRY": "Беларусь", "STATE": "Минская область", "CITY": "Минск", "ST_CODE": 107.0, "NAME": "21", "Count": null }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 27.905462657, 53.878544619, 0.0 ], [ 27.905491096, 53.878692497, 0.0 ], [ 27.906063916, 53.878654036, 0.0 ], [ 27.90608928, 53.878785915, 0.0 ], [ 27.906138187, 53.878782631, 0.0 ], [ 27.906160055, 53.87889633, 0.0 ], [ 27.906403004, 53.878880017, 0.0 ], [ 27.906363983, 53.878677141, 0.0 ], [ 27.906319651, 53.878680117, 0.0 ], [ 27.906291632, 53.878534444, 0.0 ], [ 27.906122713, 53.878545786, 0.0 ], [ 27.906114076, 53.878500881, 0.0 ], [ 27.905462657, 53.878544619, 0.0 ] ] ] } },
{ "type": "Feature", "properties": { "ObjectName": "ОТДЕЛЬНЫЕ СТРОЕН", "LayerName": "houses", "ObjectCode": "44200000", "HOUSE_N": "7", "STREET": "Гризодубовой", "KORPUS": null, "TYP_COD": 19.0, "COUNTRY": "Беларусь", "STATE": "Минская область", "CITY": "Минск", "ST_CODE": 107.0, "NAME": "7", "Count": null }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 27.905847792, 53.879747604, 0.0 ], [ 27.906136994, 53.879723525, 0.0 ], [ 27.906043093, 53.879329787, 0.0 ], [ 27.906603129, 53.879283157, 0.0 ], [ 27.906563811, 53.879118298, 0.0 ], [ 27.905714579, 53.879189006, 0.0 ], [ 27.905847792, 53.879747604, 0.0 ] ] ] } },
{ "type": "Feature", "properties": { "ObjectName": "ОТДЕЛЬНЫЕ СТРОЕН", "LayerName": "houses", "ObjectCode": "44200000", "HOUSE_N": "3", "STREET": "Гризодубовой", "KORPUS": null, "TYP_COD": 19.0, "COUNTRY": "Беларусь", "STATE": "Минская область", "CITY": "Минск", "ST_CODE": 107.0, "NAME": "3", "Count": null }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 27.908054053, 53.879564354, 0.0 ], [ 27.907919038, 53.879005908, 0.0 ], [ 27.907070038, 53.879077567, 0.0 ], [ 27.907109881, 53.879242382, 0.0 ], [ 27.907669765, 53.879195126, 0.0 ], [ 27.907764931, 53.879588758, 0.0 ], [ 27.908054053, 53.879564354, 0.0 ] ] ] } },
Может быть, поможет: JAXB Tutorial
try {
JSONObject firstJson = getJsonObject("1.geojson");
JSONObject secondJson = getJsonObject("2.geojson");
JSONArray firstJsonFeatures = (JSONArray) firstJson.get("features");
JSONArray secondJsonFeatures = (JSONArray) secondJson.get("features");
int i = 0;
for (Object firstArrayFeatureObject : firstJsonFeatures) {
JSONObject firstArrayFeature = (JSONObject) firstArrayFeatureObject;
JSONObject firstArrayFeatureProperties = (JSONObject) firstArrayFeature.get("properties");
for (Object secondArrayFeatureObject : secondJsonFeatures) {
JSONObject secondArrayFeature = (JSONObject) secondArrayFeatureObject;
JSONObject secondArrayFeatureProperties = (JSONObject) secondArrayFeature.get("properties");
if (secondArrayFeatureProperties.get("CITY").equals(secondArrayFeatureProperties.get("CITY"))
&& secondArrayFeatureProperties.get("STREET").equals(secondArrayFeatureProperties.get("STREET"))
&& secondArrayFeatureProperties.get("HOUSE_N").equals(secondArrayFeatureProperties.get("HOUSE_N"))) {
firstArrayFeatureProperties.put("Count", secondArrayFeatureProperties.get("Count"));
}
}
System.out.println(i++);
if(i>10) break;
}
FileWriter file = new FileWriter(System.getProperty("user.dir") + "/3.geojson");
file.write(firstJson.toString(1));
System.out.println("Successfully Copied JSON Object to File...");
} catch (IOException e) {
e.printStackTrace();
}
}
private static JSONObject getJsonObject(String fileName) throws FileNotFoundException {
BufferedReader reader;
reader = new BufferedReader(new FileReader(System.getProperty("user.dir") + "/" + fileName));
StringBuilder builder = new StringBuilder();
reader.lines().forEach(builder::append);
return new JSONObject(builder.toString());
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я сделал магазин на популярных языках программирования, довольно простой- Вывод списка товаров, сам товар является ссылкой на покупку, ссылка...
есть адрес no-reply@domaincom, если написать на него, то отправится шаблонный ответ с информационным текстом
Возможно ли в ссылке http://test/phone=%20380999123123 %20 заменить на + и выводить все это в адресную строку?