【问题标题】:how to filter the string/list?如何过滤字符串/列表?
【发布时间】:2013-09-24 07:47:35
【问题描述】:

我没有。数组/列表项的格式:(我使用的是 Java)

{"scout": "webdriver", "short_version": "4.3", "long_name": "iPad", "api_name": "ipad", 

"long_version": "4.3.", "automation_backend": "webdriver", "os": "Mac 10.6"}

我只需要:"os": "Mac 10.6" 如何使用 list/json 过滤它?

我的数组是通过:

String[] str = platformJsonContent.split("}");

现在我得到了列表:

List<String> platforms = new ArrayList<String>();

        for(int i=0; i<size; i++){
            platforms.add(str[i]);
        }

//过滤器应该在这里

【问题讨论】:

  • 您是否正在使用一种语言来读取此字符串?
  • 使用Json in Java

标签: java json list filter


【解决方案1】:

使用 JSONObject 或其他方式阅读它可能会更好。

JSONObject platforms = new JSONOBject(platformJsonContent);

platforms.get("os");
#=> "Mac 10.6"

在此处查看更多文档:http://json.org/javadoc/org/json/JSONObject.html

如果您特别需要它作为一个数组,最好使用 JSONArray,它可以在 JSONObject 解析后使用 .getJSONArray 方法从 JSONObject 中获取。

http://json.org/javadoc/org/json/JSONArray.html

您需要下载并引用 JSON java 包:http://www.json.org/java/json.org,然后在任何构建系统中设置引用。最终代码可能类似于:

import org.json.JSONObject;
import org.json.JSONException;

public class Test {
    public static void main(String[] args) {
        try {
            String platformJsonContent = "{\"scout\": \"webdriver\", \"short_version\": \"4.3\", \"long_name\": \"iPad\", \"api_name\": \"ipad\", \"long_version\": \"4.3.\", \"automation_backend\": \"webdriver\", \"os\": \"Mac 10.6\"}";

            JSONObject platforms = new JSONObject(platformJsonContent);

            System.out.println(platforms.get("os"));
        } catch(JSONException ex) {
            // do something...
        }
    }
}

这会运行并输出“Mac 10.6”

【讨论】:

  • 它不工作。当调试器进入声明行时,它会破坏函数。
  • 我能得到更多的错误描述吗?您可能需要包含 JSON 库。所以复制粘贴可能并不完美。
【解决方案2】:

如果您使用的是 JEE7,请查看 http://docs.oracle.com/javaee/7/tutorial/doc/jsonp.htm

【讨论】:

    【解决方案3】:

    假设您决定不使用任何库,这是获取“操作系统”的一种方法

    //Assuming your jsonString is like this - "\"long_version\": \"4.3.\", \"automation_backend\": \"webdriver\", \"os\": \"Mac 10.6\""
    Map<String, String> pairs = getJsonMap(jsonString);
    pairs.get("os")
    

    getJsonMap() 方法如下

        private Map<String,String> getJsonMap(String jsonString){
            String[] eachPair = jsonString.replaceAll("\"", "").split(",");
            Map<String,String> pairs = new HashMap<String,String>();
            for(String pair: eachPair) {
                pairs.put(pair.substring(0, pair.indexOf(":")).trim(), pair.substring(pair.indexOf(":")+1));
            }
            return pairs;
        }
    

    我仍然强烈建议您查看 JSON 对 Java 的支持。

    【讨论】:

      【解决方案4】:

      大约 2014 年 3 月,Boon 拥有 JVM 上最快的 JSON 解析器,并且它具有切片符号库。

      所以.....

      鉴于此 JSON:

          String json = "{\"scout\": \"webdriver\", \"short_version\": \"4.3\", \"long_name\": \"iPad\", \"api_name\": \"ipad\", \n" +
                  "\n" +
                  "\"long_version\": \"4.3.\", \"automation_backend\": \"webdriver\", \"os\": \"Mac 10.6\"}";
      

      你可以这样“过滤”:

          System.out.println( atIndex( fromJson(json), "os" ) ); //one line of code
      

      输出:

      Mac 10.6
      

      您可以在此处了解有关 Boon 的更多信息:http://www.dzone.com/links/1091051.html 在这里:http://rick-hightower.blogspot.com/2014/03/boon-filtering-for-java-beans-json-and.html

      Boon 允许您解析 JSON、将 Java 对象序列化为 JSON、依赖注入 JSON、将 JSON 编组到方法调用、将 JSON 编组到构造函数调用、搜索索引 JSON、实际过滤 JSON 以及排序 JSON。如果您能想到想用 JSON 做些什么,Boon 可能会做。

      https://github.com/RichardHightower/boon

      (有那么一瞬间……我好像在引导阿甘正传的一个场景。你可以炸虾、烤虾、蒸虾。还有虾秋葵汤,还有……)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-10
        • 1970-01-01
        • 2022-01-16
        • 2019-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        相关资源
        最近更新 更多