这是有效的json数据吗?

时间:2014-12-02 18:46:49

标签: javascript arrays

网址包含以下json数据:

[{ "topic": "cricket",
    "value": "Player [ playerid=123, category=b, high=150, total=2300]",
    "place": "xyz"},
 { "topic": "cricket",
    "value": "Player [ playerid=456, category=c, high=60, total=300]",
    "place": "abc"},
 { "topic": "cricket",
    "value": "Player [ playerid=789, category=a, high=178, total=5300]",
    "place": "bnm"}]

我尝试通过以下链接在线检查这是否是有效的json:http://jsonformatter.curiousconcept.com/它表示有效。如果是,我该如何访问每个playerid?

3 个答案:

答案 0 :(得分:3)

它是有效的JSON,但有关播放器的数据嵌入在随机字符串中。你可以做以下两件事之一:

  1. 更新服务以发回不同的有效JS值,例如:

    "value": {
      "type": "Player",
      "playerid": 123,
      "category": "b",
      "high": 150,
      "total": 2300
    }
    
  2. 自己解析value密钥中的数据:

    // Simple regex, not really "parsing"
    var playerIdRE = /playerid=(\d+)/i;
    var result = playerIdRE.exec(yourData[0].value);
    // result[0] is the full match, while result[1] is the ID.
    
    // Or the more complicated version that does full parsing
    var format = /\s*(.*?)\s*\[\s*([^\]]+)\s*\]\s*/gi,
      keyValuePair = /(\w+)=([^,\]]*),?\s*/gi
    function parseComplexDataType(input) {
      var result = format.exec(input),
        typeName = result[1],
        keyValues = result[2],
        returnValue = {};
      if (!typeName) return returnValue;
      returnValue.typeName = typeName;
      input.replace(keyValuePair, function(_, key, value) {
        returnValue[key] = value;
      });
      return returnValue;
    }
    
    // Usage:
    > parseComplexDataType("Player [ playerid=123, category=b, high=150, total=2300]")
    Object {typeName: "Player", playerid: "123", category: "b", high: "150", total: "2300"}
    

答案 1 :(得分:0)

出于您的目的,它无效。一旦更正了JSON,您只需循环遍历数组并读取每个值。

var jArray = [{ 
  "topic": "cricket",
  "value": {
    "type": "Player",
    "playerid": 123,
    "category": "b",
    "high": 150,
    "total": 2300
  },
  "place": "xyz"
}, {
...
}]

访问JSON数据......

for (var i=0,len=jArray.length; i<len; i++) {
  console.log(jArray[i].topic, jArray[i].value.type);
}

答案 2 :(得分:0)

是的,确实如此。我通过以下方式查看:http://jsonlint.com/

提取&#34; playerid&#34;:

  1. 将字符串初始化为JSONArray。
  2. 迭代上面数组中的每个元素。
  3. 现在,从每个元素提取&#34;值&#34;。
  4. 最后,从这个字符串中你可以得到&#34; playerid&#34;通过使用字符串方法(请参阅下面的代码)。
  5. 以下是Java中的代码:

    ArrayList<String> player_ids = new ArrayList<String>();
    String s = "YOUR STRING";
    JSONArray ja = new JSONArray(s);
    for(int i =0; i<ja.length(); i++)
    {
       String value = ja.getJSONObject(i).getString("value");
       int start = value.indexOf("=");
       int end = value.indexOf(",");
       String player_id = value.substring(start+1, end);
       player_ids.add(player_id);
    }
    

    希望它有所帮助!!