Как я могу получить доступ к определенной позиции массива JSON в ADA? - PullRequest
4 голосов
/ 09 июля 2019

У меня есть такой массив:

{
   "Test":
         [
            0,
            1,
            2,
            3,
            4
         ]
}

Я использую GNATCOLL.JSON, но я не вижу никакой функции для обработки массивов и выполнения чего-то подобного, например:

integer = Test (2);

1 Ответ

5 голосов
/ 09 июля 2019

Возможно, вы захотите попробовать:

function Get (Val : JSON_Value; Field : UTF8_String) return JSON_Array

, а затем

function Get (Arr : JSON_Array; Index : Positive) return JSON_Value

, а затем

function Get (Val : JSON_Value; Field : UTF8_String) return Integer

Например, при запуске программы:

main.adb

with Ada.Text_IO;              
with Ada.Text_IO.Unbounded_IO;
with Ada.Strings.Unbounded;

with GNATCOLL.JSON;                 

procedure Main is

   use Ada.Text_IO;
   use Ada.Strings.Unbounded;

   Input : Unbounded_String := Null_Unbounded_String;   

begin


   --  Read.
   declare
      use Ada.Text_IO.Unbounded_IO;    
      Fd : File_Type;
   begin  
      Open (Fd, In_File, "./example.json");
      while not End_Of_File (Fd) loop
         Input := Input & Unbounded_String'(Get_Line (Fd));
      end loop;
      Close (fd);
   end;


   --  Process.
   declare         
      use GNATCOLL.JSON;     
      Root : JSON_Value := Read (Input);
      Test : JSON_Array := Root.Get ("Test");
   begin    
      for I in 1 .. Length (Test) loop
         Put_Line ("Array element :" & Integer'Image (Get (Test, I).Get));
      end loop;     
   end;     

end Main;

с

example.json

{
   "Test":
         [
            0,
            1,
            2,
            3,
            4
         ]
}

выход

$ ./main
Array element : 0
Array element : 1
Array element : 2
Array element : 3
Array element : 4
...