我有一个像{"Name":"Saaa","AppIcon":"ddd.jpg","Wallpaper.jpg","ddd.jpg"]}
这样的Json文件。我需要提取AppIcon
值。我使用json simple
lib来解析json
。解析值的代码段如下所示。
FileReader appIconReader = new FileReader("jsonpath.json");
JSONObject jsonIconObject = (JSONObject)jsonParser.parse(appIconReader);
System.out.println("APPLICATION ICON = "+jsonIconObject.get("AppIcon"));
但是我输入的输出是单个字符串,如下所示:
["ddd.jpg","Wallpaper.jpg","ddd.jpg"]
我需要像这样提取单个值
我现在没有使用方括号([])和双引号("")。我怎么能这样做?
答案 0 :(得分:4)
尝试使用JSON
。
String str="[\"ddd.jpg\",\"Wallpaper.jpg\",\"ddd.jpg\"]";
Type collectionType = new TypeToken<String[]>() {
}.getType();
String[] a=new Gson().fromJson(str,collectionType);
for (String i:a){
System.out.println(i);
}
输出
ddd.jpg
Wallpaper.jpg
ddd.jpg
编辑:针对您编辑过的问题答案。
public class Obj{
private String name;
private List<String> appIcons;
public List<String> getAppIcons() {
return appIcons;
}
public void setAppIcons(List<String> appIcons) {
this.appIcons = appIcons;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
现在您只需传递JSON
String str = "{\"name\":\"Saaa\",\"appIcons\":
[\"ddd.jpg\",\"Wallpaper.jpg\",\"ddd.jpg\"]}";
Obj obj = new Gson().fromJson(str, Obj.class);
System.out.println(obj.getAppIcons());
输出:
[ddd.jpg, Wallpaper.jpg, ddd.jpg]
答案 1 :(得分:3)
假设您有源字符串:
String str = "[\"ddd.jpg\",\"Wallpaper.jpg\",\"ddd.jpg\"]";
预定它:
str = str.substring(1, str.length() - 1);
拆分它:
String[] parts = str.split(",");
每个部分的子串:
for(int i = 0; i < parts.length; i++) {
parts[i] = parts[i].substring(1, parts[i].length() - 1);
}
现在你有一个包含每个值的数组。请注意,这是不安全的,在子字符串之前添加检查。
答案 2 :(得分:1)
您可以使用replaceAll
和split
String s="[\"ddd.jpg\",\"Wallpaper.jpg\",\"ddd.jpg\"]";
String array[]=s.replaceAll("[\\[\\]\"]", "").split(","));
System.out.println(Arrays.toString(array);
replaceAll
从[
]
"
和String
split
通过使用String
(分隔符)String
来提供,
数组
Arrays.toString
用于打印数组。<强> 输出 强>
[ddd.jpg, Wallpaper.jpg, ddd.jpg]
使用JSON
,您可以尝试此操作
String s="{\"Name\":\"Saaa\","+
" \"AppIcon\":[\"ddd.jpg\",\"Wallpaper.jpg\",\"ddd.jpg\"]}";
org.json.JSONObject json=new org.json.JSONObject(s);
org.json.JSONArray jarray=json.getJSONArray("AppIcon");
System.out.println(jarray.get(0));//Will give ddd.jpg
//Iterate over array to get all
答案 3 :(得分:1)
这就是你想要的:
String filePath = "pathofjson\\test.json";
FileReader reader = new FileReader(filePath);
JSONParser jsonParser = new JSONParser();
try {
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);
JSONArray lang= (JSONArray) jsonObject.get("AppIcon");
System.out.println(lang);
for(int i=0; i<lang.size(); i++){
System.out.println(lang.get(i));
}
} catch (org.json.simple.parser.ParseException e) {
e.printStackTrace();
}
答案 4 :(得分:0)
试试这个:
String str = "[\"ddd.jpg\",\"Wallpaper.jpg\",\"ddd.jpg\"]";
String tempStr = str.replaceAll("\\W{2,}", ",");
String substring = tempStr.substring(1, tempStr.length() -1);
String[] strArray = substring.split(",");
答案 5 :(得分:0)
您应该使用java.util.StringTokenizer
String s = "[\"ddd.jpg\",\"Wallpaper.jpg\",\"ddd.jpg\"]";
StringTokenizer tokenizer = new StringTokenizer(s, "[\",]");
while (tokenizer.hasMoreElements()) {
System.out.println(tokenizer.nextElement());
}
答案 6 :(得分:0)
根据描述,这就是你要求的:
String s = "[\"ddd.jpg\",\"Wallpaper.jpg\",\"ddd.jpg\"," +
"\"Wallpaper.jpg\",\"ddd.jpg\"," +
"\"Wallpaper.jpg\",\"ddd.jpg\"]";
String [] almost_the_words = s.split("\",\"");
int l = almost_the_words.length;
ArrayList<String> words = new ArrayList<String>();
String temp1 = almost_the_words[0].split("\"")[1];
String temp2 = almost_the_words[l-1].split("\"")[0];
words.add(temp1);
for(int i=1; i< l-1; i++) {
words.add(almost_the_words[i]);
}
words.add(temp2);
for(String w : words) {
System.out.println(w);
}
修改强>
使用GSON解析带有这些字符串的JSON文件:
import java.util.ArrayList;
public class MyObject {
ArrayList<String> appicon;
public MyObject(ArrayList<String> appicon) {
super();
this.appicon = appicon;
}
public ArrayList<String> getAppicon() {
return appicon;
}
public void setAppicon(ArrayList<String> appicon) {
this.appicon = appicon;
}
}
使用课程&#34; MyObject&#34;使用图书馆GSON:https://code.google.com/p/google-gson/
答案 7 :(得分:0)
这里有一个可能的解决方案:
String data = "{\"Name\":\"Saaa\",\"AppIcon\":[\"ddd.jpg\",\"Wallpaper.jpg\",\"ddd.jpg\"]}";
data = data.replaceAll("(.*\"AppIcon\":\\[)(.+)(\\].*)", "$2");
data = data.replaceAll("\"", "");
for(String str: data.split(",")) {
System.out.println(str);
}
只显式涉及String类,并且适用于问题中定义的格式的每个String(具有“AppIcon:[]”)。