This is the sample JSON I want to be able to parse:

```json
[
  {
    "a":{
      "username":"aaa",
      "email":"aaa@gmail.com"
    }
  },
  {
    "b":{
      "username":"bbb",
      "email":"bbb@gmail.com"
    }
  }
]

```

I need that a call to `getData('b', 'email')` must output `bbb@gmail.com`!

---

I am really struggling to understand how to use the `System.JSON` unit, but I can't get the solution! I want to be able to write a function that extracts a particular data from the above kind of JSON structure. This is my code so far. In the class constructor I have:

```pascal
var
  FIds: TJSONArray;
begin
  FIds := TJSONObject.ParseJSONValue({json string here}) as TJSONArray;
end;

```

Then, inside the function that must return the data, I have written this:

```pascal
// 'name' can be 'a' or 'b'  | 'data' can be 'username' or 'email'
function TTest.getData(const name, data: string): string;
var
  FValue, FValueInner: TJSONValue;
begin
  for FValue in Fids do
  begin
    if (FValue is TJSONArray) then
    begin
      //Here I am sure that I have a TJSONArray (which can be 'a' or 'b' from above)
    end;
  end;
end;

```

According to what I have written above, I have to check the value of `name` and decide if I have to access the data inside `a` or `b`. Then, once I have picked the correct JSON array `a` or `b`, I have to select if I want to display the `username` or the `email` field (which is specified inside the `data` variable). 

How can I do this?

---

This is my latest attempt but I really can't understand what to do:

```pascal
... same code above ...

if (FValue is TJSONArray) then
begin
  //here I want to check if the current array is a or b
  if ((FValue as TJSONArray).Items[0] as TJSONValue).Value = name then
  begin
    Farr := TJSONObject.ParseJSONValue(((FValue as TJSONArray).Items[0] as TJSONValue).ToJSON) as TJSONArray;
    try
      //here I want to get the data inside username or email
      for FValueInner in Farr do
        Result := FValueInner.GetValue<string>(data);
    finally
      Farr.Free;
    end;
  end;
end;

```

Where `Farr: TJSONArray;` and `FValueInner: TJSONValue;`