我想问一个关于在jsonArray
上将StringArray
转换为Android
的问题。这是我从服务器获取jsonArray
的代码。
try {
DefaultHttpClient defaultClient = new DefaultHttpClient();
HttpGet httpGetRequest = new HttpGet("http://server/android/listdir.php");
HttpResponse httpResponse = defaultClient.execute(httpGetRequest);
BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(),"UTF-8"));
String json = reader.readLine();
//JSONObject jsonObject = new JSONObject(json);
JSONArray jsonArray = new JSONArray(json);
Log.d("", json);
//Toast.makeText(getApplicationContext(), json, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这是JSON
。
[
{"name": "IMG_20130403_140457.jpg"},
{"name":"IMG_20130403_145006.jpg"},
{"name":"IMG_20130403_145112.jpg"},
{"name":"IMG_20130404_085559.jpg"},
{"name":"IMG_20130404_113700.jpg"},
{"name":"IMG_20130404_113713.jpg"},
{"name":"IMG_20130404_135706.jpg"},
{"name":"IMG_20130404_161501.jpg"},
{"name":"IMG_20130405_082413.jpg"},
{"name":"IMG_20130405_104212.jpg"},
{"name":"IMG_20130405_160524.jpg"},
{"name":"IMG_20130408_082456.jpg"},
{"name":"test.jpg"}
]
如何将我所拥有的jsonArray转换为StringArray,以便我可以像这样获得StringArray:
array = {"IMG_20130403_140457.jpg","IMG_20130403_145006.jpg",........,"test.jpg"};
感谢您的帮助:)
答案 0 :(得分:57)
看看这个tutorial。 你也可以在json之上解析如下:
JSONArray arr = new JSONArray(yourJSONresponse);
List<String> list = new ArrayList<String>();
for(int i = 0; i < arr.length(); i++){
list.add(arr.getJSONObject(i).getString("name"));
}
答案 1 :(得分:18)
最简单正确的代码是:
public static String[] toStringArray(JSONArray array) {
if(array==null)
return null;
String[] arr=new String[array.length()];
for(int i=0; i<arr.length; i++) {
arr[i]=array.optString(i);
}
return arr;
}
使用List<String>
并不是一个好主意,因为你知道数组的长度。
请注意,它会在arr.length
条件中使用for
,以避免在每个循环中调用方法,即array.length()
。
答案 2 :(得分:15)
String[] arr = jsonArray.toString().replace("},{", " ,").split(" ");
答案 3 :(得分:10)
public static String[] getStringArray(JSONArray jsonArray) {
String[] stringArray = null;
if (jsonArray != null) {
int length = jsonArray.length();
stringArray = new String[length];
for (int i = 0; i < length; i++) {
stringArray[i] = jsonArray.optString(i);
}
}
return stringArray;
}
答案 4 :(得分:7)
您可以循环创建字符串
List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
list.add( jsonArray.getString(i) );
}
String[] stringArray = list.toArray(new String[list.size()]);
答案 5 :(得分:4)
你去了:
String tempNames = jsonObj.names().toString();
String[] types = tempNames.substring(1, tempNames.length()-1).split(","); //remove [ and ] , then split by ','
答案 6 :(得分:3)
以下是代码:
// XXX satisfies only with this particular string format
String s = "[{\"name\":\"IMG_20130403_140457.jpg\"},{\"name\":\"IMG_20130403_145006.jpg\"},{\"name\":\"IMG_20130403_145112.jpg\"},{\"name\":\"IMG_20130404_085559.jpg\"},{\"name\":\"IMG_20130404_113700.jpg\"},{\"name\":\"IMG_20130404_113713.jpg\"},{\"name\":\"IMG_20130404_135706.jpg\"},{\"name\":\"IMG_20130404_161501.jpg\"},{\"name\":\"IMG_20130405_082413.jpg\"},{\"name\":\"IMG_20130405_104212.jpg\"},{\"name\":\"IMG_20130405_160524.jpg\"},{\"name\":\"IMG_20130408_082456.jpg\"},{\"name\":\"test.jpg\"}]";
s = s.replace("[", "").replace("]", "");
s = s.substring(1, s.length() - 1);
String[] split = s.split("[}][,][{]");
for (String string : split) {
System.out.println(string);
}
答案 7 :(得分:1)
仅使用便携式JAVA API。 http://www.oracle.com/technetwork/articles/java/json-1973242.html
try (JsonReader reader = Json.createReader(new StringReader(yourJSONresponse))) {
JsonArray arr = reader.readArray();
List<String> l = arr.getValuesAs(JsonObject.class)
.stream().map(o -> o.getString("name")).collect(Collectors.toList());
}
答案 8 :(得分:1)
您可以输入json数组到此函数get输出为字符串数组
示例输入 - { &#34;两性&#34; :[&#34;男性&#34;,&#34;女性&#34;] }
输出 - {&#34;男性&#34;,&#34;女性&#34;}
private String[] convertToStringArray(Object array) throws Exception {
return StringUtils.stripAll(array.toString().substring(1, array.toString().length()-1).split(","));
}
答案 9 :(得分:1)
即用型方法:
/**
* Convert JSONArray to ArrayList<String>.
*
* @param jsonArray JSON array.
* @return String array.
*/
public static ArrayList<String> toStringArrayList(JSONArray jsonArray) {
ArrayList<String> stringArray = new ArrayList<String>();
int arrayIndex;
JSONObject jsonArrayItem;
String jsonArrayItemKey;
for (
arrayIndex = 0;
arrayIndex < jsonArray.length();
arrayIndex++) {
try {
jsonArrayItem =
jsonArray.getJSONObject(
arrayIndex);
jsonArrayItemKey =
jsonArrayItem.getString(
"name");
stringArray.add(
jsonArrayItemKey);
} catch (JSONException e) {
e.printStackTrace();
}
}
return stringArray;
}
答案 10 :(得分:0)
下面的代码将转换格式的JSON数组
[{“ version”:“ 70.3.0; 3”},{“ version”:“ 6R_16B000I_J4; 3”},{“ version”:“ 46.3.0; 3”},{“ version”:“ 20.3.0; 2“},{” version“:” 4.1.3; 0“},{” version“:” 10.3.0; 1“}]
到字符串列表
[70.3.0; 3,6R_16B000I_J4; 3,46.3.0; 3,20.3.0; 2,4.1.3; 0,10.3.0; 1]
代码:
ObjectMapper mapper = new ObjectMapper();
ArrayNode node = (ArrayNode)mapper.readTree(dataFromDb);
data = node.findValuesAsText("version");
//“版本”是JSON中的节点
并使用com.fasterxml.jackson.databind.ObjectMapper
答案 11 :(得分:0)
迟到了一个答案,但这是我使用Gson想到的:
对于jsonarray foo:[{“ test”:“ bar”},{“ test”:“ bar2”}]
JsonArray foo = getJsonFromWherever();
String[] test = new String[foo.size()]
foo.forEach(x -> {test = ArrayUtils.add(test, x.get("test").getAsString());});
答案 12 :(得分:0)
尝试相同的情况之一,但是找到了一个不同而简单的解决方案,将JSONArray转换为List。
import java.lang.reflect.Type;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
String jsonStringArray = "[\"JSON\",\"To\",\"Java\"]";
//creating Gson instance to convert JSON array to Java array
Gson converter = new Gson();
Type type = new TypeToken<List<String>>(){}.getType();
List<String> list = converter.fromJson(jsonStringArray, type );
尝试一下。
答案 13 :(得分:0)
您可能想看一下JSONArray.toList()
,它返回一个包含表示您的JSON结构的Maps和Lists的List
。因此,您可以将其与Java Streams一起使用,例如:
JSONArray array = new JSONArray(jsonString);
List<String> result = array.toList().stream()
.filter(Map.class::isInstance)
.map(Map.class::cast)
.map(o -> o.get("name"))
.filter(String.class::isInstance)
.map(String.class::cast)
.collect(Collectors.toList());
这甚至对于更复杂的对象也可能有用。
或者,您可以只使用IntStream
来遍历JSONArray
中的所有项目并映射所有名称:
JSONArray array = new JSONArray(jsonString);
List<String> result = IntStream.range(0, array.length())
.mapToObj(array::getJSONObject)
.map(o -> o.getString("name"))
.collect(Collectors.toList());