【问题标题】:how to parse the given string in to meaning ful json? [closed]如何将给定的字符串解析为有意义的 json? [关闭]
【发布时间】:2013-09-18 12:06:09
【问题描述】:

我通过HttpClient从一个网站获得了这个值。

[
    {
        "scout": "webdriver",
        "short_version": "4.3",
        "long_name": "iPad",
        "api_name": "ipad",
        "long_version": "4.3.",
        "automation_backend": "webdriver",
        "os": "Mac 10.4"
    },
    {
        "scout": "webdriver",
        "short_version": "5.0",
        "long_name": "Firefox",
        "api_name": "firefox",
        "long_version": "14",
        "automation_backend": "webdriver",
        "os": "Mac 10.5"
    },
    {
        "scout": "webdriver",
        "short_version": "4",
        "long_name": "Firefox",
        "api_name": "firefox",
        "long_version": "15",
        "automation_backend": "webdriver",
        "os": "Mac 10.6"
    },
    {
        "scout": "webdriver",
        "short_version": "5",
        "long_name": "Chrome",
        "api_name": "chrome",
        "long_version": "5.0.1.",
        "automation_backend": "webdriver",
        "os": "Mac 10.7"
    }
]

我想把这些数据变成这种格式:

[OS: {Mac10.4,Mac10.5}]

等,操作系统列表

[{api_name: {firefox:{14,15}} }]

等,浏览器列表及其版本。

操作系统和浏览器列表太长。 如何使用 json 或任何其他方法解析它?

【问题讨论】:

  • 谷歌提供Gson。为什么不尝试使用它。您甚至可以使用标准JSON 来解析您的回复!以及regd如何使用它们来解析,联系谷歌先生。 :)
  • 为什么不使用jackson解析它并在java中进行分组?
  • 我使用了 json,但它给出了错误,因为我告诉数组太长了。
  • @JitendraKhedar - 仅仅因为 JSON 太大,解析不会出错。由于 json 的长度,您的解析逻辑可能存在缺陷。
  • @R.J 你能给我这个吗,我的控制器返回 json.tostring (比如说)。现在我的ajax调用是: $.ajax({ url: 'getSaucePlatforms.htm', type: 'POST', async: false, success: function(data){ alert(data); } });会有什么变化?

标签: java json httpclient


【解决方案1】:

我建议你看看 json-smart 库。它重量轻,速度快。 (https://code.google.com/p/json-smart/)

然后你可以写这样的东西(只是例子):

    Map<String, List<String>> osMap = new HashMap<String, List<String>>();
    osMap.put("OS", new ArrayList<String>());

    Map<String, Map<String, List<String>>> apiNameMap = 
        new HashMap<String, Map<String, List<String>>>();
    apiNameMap.put("api_name", new HashMap<String, List<String>>());

    JSONArray ja = (JSONArray) JSONValue.parse(JSON_STRING);
    for (Object obj : ja) {
        JSONObject jsonObj = (JSONObject) obj;
        String os = (String) jsonObj.get("os");
        String apiName = (String) jsonObj.get("api_name");
        String longVersion = (String) jsonObj.get("long_version");

        // OS
        if (!osMap.get("OS").contains(os)) {
            osMap.get("OS").add(os);
        }

        // API
        if (!apiNameMap.get("api_name").containsKey(apiName)) {
            apiNameMap.get("api_name")
                    .put(apiName, new ArrayList<String>());
        }
        apiNameMap.get("api_name").get(apiName).add(longVersion);

    }

    System.out.println(JSONValue.toJSONString(osMap));
    System.out.println(JSONValue.toJSONString(apiNameMap));

【讨论】:

    【解决方案2】:

    这样做:

    $(document).ready(function(){
    //here getting the json Array from session
        var d  = json1;
        //after making a variable array to put j son data one by one by looping
        var availableTags = new Array();
        for(var i=0;i<d.forms.length;i++){
            availableTags[i] = d.forms[i].productName;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2014-01-04
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 2020-02-28
      • 1970-01-01
      相关资源
      最近更新 更多