代码之家  ›  专栏  ›  技术社区  ›  Glen Pierce

未知JSON对象/数组中有什么?

  •  -2
  • Glen Pierce  · 技术社区  · 10 年前

    我想从Android中的Facebook API获取朋友的名字列表。在这个过程中,我想学习如何读取JSON对象/数组。

    我有JSONObject和/或JSONArray已传递给我。我不知道其中有什么*。一旦我知道存在哪些字段,我就知道如何读取数据,但如果没有密钥,我无法尽可能地读取任何内容。即使有钥匙,我怎么知道里面有什么?

    基本上,我想要一段代码,看起来像:

    JSONArray mArray = response.getJSONArray();
    String theEntireDatabase = mArray.getStringOFEntireDatabase();
    

    并使用如下字符串进行响应:

    {
       "phoneNumber": [
          {
             "type": "work",
             "num": "11111"
          },
          {
             "type": "home",
             "num": "2222"
          }
       ],
       "address": {
          "state": "World",
          "address": "infinite space, 000",
          "city": "Android city"
       },
       "surname": "Swa",
       "name": "Android"
    }
    

    事先对数据库中的内容一无所知?

    *据我所知,它可能是“颜色”,也可能是“核威胁级别”。

    我试过了,但它只提供钥匙: Javascript get JSON key Name

    4 回复  |  直到 10 年前
        1
  •  1
  •   arodriguezdonaire    10 年前
    JSONArray mArray = response.getJSONArray();
    String theEntireDatabase = mArray.toString();
    

    这应该很有效。
    如果你想让JSONArray打印得漂亮,你可以在我刚才提供给你的代码之后添加这个。

    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    JsonParser jp = new JsonParser();
    JsonElement je = jp.parse(theEntireDatabase);
    String prettyJsonString = gson.toJson(je); 
    
        2
  •  1
  •   T.J. Crowder    10 年前

    JSONObject#keys 将告诉您为对象定义了哪些键。 JSONArray#length 将告诉您数组中有多少个条目(以及可以用于 index 使用其他方法: 0 通过 length() - 1 ). JSONObject#toString / JSONArray#toString 会给你你要的绳子。

        3
  •  1
  •   Archit Garg    10 年前

    看看Jacksons内置的树模型功能。 http://wiki.fasterxml.com/JacksonTreeModel

    您的代码将是:

    public void parse(String json)  {
           JsonFactory factory = new JsonFactory();
    
           ObjectMapper mapper = new ObjectMapper(factory);
           JsonNode rootNode = mapper.readTree(json);  
    
           Iterator<Map.Entry<String,JsonNode>> fieldsIterator = rootNode.fields();
           while (fieldsIterator.hasNext()) {
    
               Map.Entry<String,JsonNode> field = fieldsIterator.next();
               System.out.println("Key: " + field.getKey() + "\tValue:" + field.getValue());
           }
    }
    
        4
  •  0
  •   cypherabe    10 年前

    除了技术答案之外(JSONObject#toString(n)似乎是最简单的 http://developer.android.com/reference/org/json/JSONObject.html ),

    我通常会使用两种更实用的解决方案:

    1. 寻找API文档……我知道,这听起来很疯狂,但有些公司确实提供了这样的东西
    2. 编写一个简短的javascript脚本来尝试API,并在开发人员控制台/firebug/whatever中检查结果