如何解析这些值?

时间:2014-07-09 11:02:12

标签: java json

我有一个像{"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"]

我需要像这样提取单个值

  • ddd.jpg
  • Wallpaper.jpg
  • ddd.jpg

我现在没有使用方括号([])和双引号("")。我怎么能这样做?

8 个答案:

答案 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)

您可以使用replaceAllsplit

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:[]”)。