Question: I'm trying to setup a form where some fields needs to be hidden depending on the user role. I'm doing this in my own module using hook\_form\_FORM\_ID\_alter. No problem with common text, email or link fields (e.g. $form['field\_companyname']['und'][0]['value']['#type']='hidden'). But for an image field or a multiple value file field the usual way won't work.

Anybody can give me a clue?

Answer: 
The JSONObject documentation (link: <http://developer.android.com/reference/org/json/JSONObject.html>) has the following description for the `keys()` function:

> 
> public Iterator keys ()
> 
> 
> Since: API Level 1
> 
> 
> Returns an iterator of the String names in this object. The returned
>  iterator supports remove, which will remove the corresponding mapping
>  from this object. If this object is modified after the iterator is
>  returned, the iterator's behavior is undefined. **The order of the keys
>  is undefined**.
> 
> 
> 

So you may get the keys but the order is undefined. You may use any of the sorting algorithms if you want the keys in any particular order.

**EDIT**

Since you are unaware of the order of KEYS you are getting from the WS, after receiving the data you may show the details on screen in an ordered format . After building the `arraylist` `KEYS`, you may sort it alphabetically using the following:

```
Collections.sort(KEYS);  

```

This will order the `Strings` in the `KEYS` `arraylist` according to its *natural ordering* (which is *alphabetically*).
Use different library to parse json dynamically. 

Below I wrote a piece of code based on Jackson JSON Processor, which is the best JSON library in my opinion

```
public void test() throws IOException {
    String str = "{\n" +
            "  \"result\": \"Success\",\n" +
            "  \"AlertDetails\": [\n" +
            "    {\n" +
            "      \"ShipmentNumber\": \"SHP34\",\n" +
            "      \"Customer\": \"BEST\",\n" +
            "      \"DateCreated\": \"2012-08-29T04:59:18Z\",\n" +
            "      \"CustomerName\": \"BEST\"\n" +
            "    }\n" +
            "  ]\n" +
            "}";

    JsonFactory factory = new JsonFactory();
    JsonParser jsonParser = factory.createJsonParser(str);

    JsonToken jsonToken;
    SerializedString alertDetails = new SerializedString("AlertDetails");
    while (!jsonParser.nextFieldName(alertDetails)) { /* move to AlertDetails field */ }

    jsonParser.nextToken(); // skip [ start array
    jsonParser.nextToken(); // skip { start object
    // until } end object
    while ((jsonToken = jsonParser.nextToken()) != JsonToken.END_OBJECT) {
        if (jsonToken == JsonToken.FIELD_NAME) {
            System.out.println(jsonParser.getCurrentName());
        }
    }

}

```

It simply prints out field names in the same order as in json:

```
ShipmentNumber
Customer
DateCreated
CustomerName

```

---

**EDIT**

Naturally you can use other libraries like gson etc. But remember, as is written on [json.org](http://json.org), that:

> 
> An object is an unordered set of name/value pairs.
> 
> 
> 

and the order of keys depends on implementation and might vary in each request.