如何将多个 JSON 对象提取到字符串中
How to extract multiple JSON Objects into String
我正在从文件中读取多个 JSONObject
并使用 StringBuilder
转换为字符串。
这些是 JSON 个对象。
{"Lng":"-1.5908601","Lat":"53.7987816"}
{"Lng":"-2.5608601","Lat":"54.7987816"}
{"Lng":"-3.5608601","Lat":"55.7987816"}
{"Lng":"-4.5608601","Lat":"56.7987816"}
{"Lng":"-5.560837","Lat":"57.7987816"}
{"Lng":"-6.5608294","Lat":"58.7987772"}
{"Lng":"-7.5608506","Lat":"59.7987823"}
如何转换成字符串?
实际代码是:-
BufferedReader reader = new BufferedReader(new InputStreamReader(contents.getInputStream()));
StringBuilder builder = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
builder.append(line);
}
}
catch(IOException e)
{
msg.Log(e.toString());
}
String contentsAsString = builder.toString();
//msg.Log(contentsAsString);
我试过这个代码
JSONObject json = new JSONObject(contentsAsString);
Iterator<String> iter = json.keys();
while(iter.hasNext())
{
String key = iter.next();
try{
Object value = json.get(key);
msg.Log("Value :- "+ value);
}catch(JSONException e)
{
//error
}
}
它只是给出了第一个对象。如何循环播放?
试一试,看看效果如何,
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
ArrayList<JSONObject> contentsAsJsonObjects = new ArrayList<JSONObject>();
while(true)
{
String str = in.readLine();
if(str==null)break;
contentsAsJsonObjects.add(new JSONObject(str));
}
for(int i=0; i<contentsAsJsonObjects.size(); i++)
{
JSONObject json = contentsAsJsonObjects.get(i);
String lat = json.getString("Lat");
String lng = json.getString("Lng");
Log.i("TAG", lat + lng)
}
您所做的是将多个 JSON 对象加载到一个 JSON 对象中。这没有意义——只解析第一个对象是合乎逻辑的,解析器在第一个 }
之后不期望任何内容。因为你想遍历加载的对象,你应该将它们加载到 JSON 数组中。
如果可以编辑输入文件,通过添加大括号和逗号将其转换为数组
[
{},
{}
]
如果不能,请将大括号附加到 StringBuilder
的开头,并将逗号附加到每个加载的行。考虑附加条件以消除由不正确的输入文件引起的异常。
最后,您可以从字符串创建 JSON 数组并使用此代码对其进行循环
JSONArray array = new JSONArray(contentsAsString);
for (int i = 0; i < array.length(); ++i) {
JSONObject object = array.getJSONObject(i);
}
我正在从文件中读取多个 JSONObject
并使用 StringBuilder
转换为字符串。
这些是 JSON 个对象。
{"Lng":"-1.5908601","Lat":"53.7987816"}
{"Lng":"-2.5608601","Lat":"54.7987816"}
{"Lng":"-3.5608601","Lat":"55.7987816"}
{"Lng":"-4.5608601","Lat":"56.7987816"}
{"Lng":"-5.560837","Lat":"57.7987816"}
{"Lng":"-6.5608294","Lat":"58.7987772"}
{"Lng":"-7.5608506","Lat":"59.7987823"}
如何转换成字符串?
实际代码是:-
BufferedReader reader = new BufferedReader(new InputStreamReader(contents.getInputStream()));
StringBuilder builder = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
builder.append(line);
}
}
catch(IOException e)
{
msg.Log(e.toString());
}
String contentsAsString = builder.toString();
//msg.Log(contentsAsString);
我试过这个代码
JSONObject json = new JSONObject(contentsAsString);
Iterator<String> iter = json.keys();
while(iter.hasNext())
{
String key = iter.next();
try{
Object value = json.get(key);
msg.Log("Value :- "+ value);
}catch(JSONException e)
{
//error
}
}
它只是给出了第一个对象。如何循环播放?
试一试,看看效果如何,
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
ArrayList<JSONObject> contentsAsJsonObjects = new ArrayList<JSONObject>();
while(true)
{
String str = in.readLine();
if(str==null)break;
contentsAsJsonObjects.add(new JSONObject(str));
}
for(int i=0; i<contentsAsJsonObjects.size(); i++)
{
JSONObject json = contentsAsJsonObjects.get(i);
String lat = json.getString("Lat");
String lng = json.getString("Lng");
Log.i("TAG", lat + lng)
}
您所做的是将多个 JSON 对象加载到一个 JSON 对象中。这没有意义——只解析第一个对象是合乎逻辑的,解析器在第一个 }
之后不期望任何内容。因为你想遍历加载的对象,你应该将它们加载到 JSON 数组中。
如果可以编辑输入文件,通过添加大括号和逗号将其转换为数组
[
{},
{}
]
如果不能,请将大括号附加到 StringBuilder
的开头,并将逗号附加到每个加载的行。考虑附加条件以消除由不正确的输入文件引起的异常。
最后,您可以从字符串创建 JSON 数组并使用此代码对其进行循环
JSONArray array = new JSONArray(contentsAsString);
for (int i = 0; i < array.length(); ++i) {
JSONObject object = array.getJSONObject(i);
}