gpt4 book ai didi

android - 如何通过在android中重复循环来创建json对象?

转载 作者:行者123 更新时间:2023-11-30 04:00:14 24 4
gpt4 key购买 nike

我想通过在 while 循环中获取形状文件的点来创建 Json 对象。形状文件包含 73 个点。我将形状文件的点存储在 json oject 中,并在循环中将对象添加到 ArrayList,在 while 下方循环我从 ArrayList 中一个一个地检索对象并将其存储在 JsonArray 中,但这里的问题是 shapefile 的最后一个记录点在 arraylist 中存储了 73 次。如何解决这个问题请帮助我。

这是我的代码

try {

File file= new File(Environment.getDataDirectory().getAbsolutePath()+"/ne_50m_admin_0_tiny_countries.shp");
Long fileLength=file.length();
Log.d("FileLength is","file"+fileLength);
String shpFile = Environment.getDataDirectory().getAbsolutePath().toString()+"/ne_50m_admin_0_tiny_countries.shp";
//String shpFile = Environment.getDataDirectory().getAbsolutePath().toString()+"/ne_50m_admin_0_breakaway_disputed_areas.shp";
ShapeReader reader = new ShapeReader(shpFile, true);
ShapeType shpType=reader.getHeader().getShapeType();
JSONObject jObject = new JSONObject();
JSONObject wkidJson = new JSONObject();
jObject.put("objectIdFieldName","OBJECTID");
jObject.put("globalIdFieldName","");
jObject.put("geometryType",shpType);
wkidJson.put("wkid", new Integer(102100));
jObject.put("spatialReference",wkidJson);
JSONArray fieldsList = new JSONArray();
JSONObject idJson = new JSONObject();
JSONObject yJson = new JSONObject();
JSONObject xJson = new JSONObject();
idJson.put( "name","OBJECTID");
idJson.put("alias", "OBJECTID");
idJson.put("type", "esriFieldTypeOID");
yJson.put( "name","y");
yJson.put("alias", "y");
yJson.put("type", "esriFieldTypeDouble");
xJson.put( "name","x");
xJson.put("alias", "x");
xJson.put("type", "esriFieldTypeDouble");
fieldsList.put(idJson);
fieldsList.put(yJson);
fieldsList.put(xJson);
jObject.put("fields",fieldsList);
JSONObject geomJson = new JSONObject();
JSONObject attJson = new JSONObject();
JSONObject featuresJson = new JSONObject();
JSONArray featuresList = new JSONArray();
Log.d("Header info is","Header"+reader.getHeader().getFileLength());
recordshape=reader.new Record();
ArrayList a= new ArrayList();
while (reader.hasNext())
{

if(recordshape.end < fileLength)
{
if(shpType==ShapeType.POINT)
{
recordshape=reader.nextRecord();
int recordNumber=recordshape.number;
double Xcoordinate= recordshape.minX;
double Ycoordinate=recordshape.minY;
Log.d("Xcoordinate info is","Xcoordinate"+Xcoordinate);
Log.d("Ycoordinate info is","Ycoordinate"+Ycoordinate);
geomJson.put("x", Xcoordinate);
geomJson.put("y", Ycoordinate);
attJson.put("OBJECTID", recordNumber);
attJson.put("y", Ycoordinate);
attJson.put("x", Xcoordinate);
}

}
else
break;

featuresJson.put("geometry", geomJson);
featuresJson.put("attributes", attJson);
a.add(featuresJson);
Log.d("featuresJson info is","featuresJson"+featuresJson);
}
Log.d("featuresJson info is","featuresJson"+featuresJson);
Log.d("size info is","size"+a.size());
for(int i=0;i<a.size();i++)
{
featuresList.put(a.get(i));
}

Log.d("featuresList info is","featuresList"+featuresList);
jObject.put("features",featuresList);
String jsonString = jObject.toString();

jsonString = jsonString.replace("\\" , "");

FileWriter writeFile = new FileWriter(Environment.getDataDirectory().getAbsolutePath().toString()+"/Test.json");
BufferedWriter out = new BufferedWriter(writeFile);
out.write(jsonString);
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("Error","Message"+e.getMessage());
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("Exception","Message"+e.getMessage());
}

我要的json格式是

{
"objectIdFieldName": "OBJECTID",
"globalIdFieldName": "",
"geometryType": "esriGeometryPoint",
"spatialReference": {
"wkid": 102100
},
"fields": [
{
"name": "OBJECTID",
"alias": "OBJECTID",
"type": "esriFieldTypeOID"
},
{
"name": "y",
"alias": "y",
"type": "esriFieldTypeDouble"
},
{
"name": "x",
"alias": "x",
"type": "esriFieldTypeDouble"
}
],
"features": [
{
"geometry": {
"x": -13021472.272599999,
"y": 4046325.7190999985
},
"attributes": {
"OBJECTID": 212,
"y": 4046325.7191,
"x": -13021472.2726
}
},
{
"geometry": {
"x": -13021124.9134,
"y": 4046747.3976000026
},
"attributes": {
"OBJECTID": 232,
"y": 4046747.3976,
"x": -13021124.9134

}
}
]

请帮帮我谢谢。

最佳答案

在您的循环中,您一遍又一遍地将值放入同一个 json 对象中。因此,当您对它进行 jsonify 处理时,您的数组包含 n* 个相同的对象。

您需要创建新对象以添加到循环的每次传递中。

这三个声明必须在循环内移动:

JSONObject geomJson = new JSONObject();
JSONObject attJson = new JSONObject();
JSONObject featuresJson = new JSONObject();

关于android - 如何通过在android中重复循环来创建json对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12616481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com