Как правильно достать массив из JSON? библиотека org.json

public String[] ReadFullArray(Context Context, String Key, int TargetArraySize) throws IOException, JSONException {

        String[] Array = new String[TargetArraySize];
           
            Array = new String[3];
            JSONObject JSONObj = new JSONObject(GetJsonFileContent(Context));
            JSONArray JsonArray = JSONObj.getJSONArray(Key);

            for (int i = 0; i <= JsonArray.length(); i++) {
                Array[i] = JsonArray.getString(i);
            }

        return Array;
    }


private String GetJsonFileContent(Context Context) throws IOException {

        File Cfg = new File("/data/data/mate.files/", "Cfg.json");

        String PreparedData = "";
        int CfgLength = CfgStr.getBytes().length;
        char[] Char;
        Char = new char[CfgLength];
        InputStreamReader InputRdr = new InputStreamReader(Context.openFileInput("Cfg.json"));
        InputRdr.read(Char, 0, CfgLength);

        int Counter = 0;
        //Convert char array to String
        for (Counter = 0; Counter != CfgLength; Counter++) {
            StringBuilder StrBld = new StringBuilder();
            PreparedData = PreparedData + Char[Counter];
        }
        InputRdr.close();

        return PreparedData;
    }

Почему-то метод ReadFullArray возвращает массив, равный null. JSON:

{
        "OnStartOpen": "PrevSession",
        "ExitBehavior": "NoReqNoDeletion",
        "ExitRequestTimeout": "No",
        "DefaultAction": "Exit",
        "Locale": "",
        "Accounts": "No",
        "ListViewMode": "DetailedList", 
        "ListSort": "AZ",
        "ShowGraphAboveList": false,
        "UITheme": "Space",
        "TabCloseBtn": "Left",
        "TabIcon": false,
        "NewTabPos": "AfterCurrent",
        "ClonedTabPos": "AfterCurrent",
        "MinActiveTabWidth": "65px",
        "MinTabWidth": "45px",
        "MaxActiveTabWidth": "MaxPossible",
        "MaxTabWidth": "MaxPossible",
        "TabShape": "Rounded",
        "TabMark": "Line",
        "TabMarkColor": "DefinedByTheme",
        "TabMarkWeight": "8px",
        "ShowTabCloseBtnOn": "AllTabs",
        "NewTabBtnPos": "Right",
        "EnableExperimentalTabFeatures": false,
        "EnableTabGrouping": true,
        "TabGroupType": "Compact",
        "GroupTabsByDrag": "false",
        "OpenTabGroupAppearance": "Dropdn",
        "Layout1SelectionBottom": "NormBarPinned",
        "Layout1SelectionBottomContent": ["Selection'@string/Selection'", "Delete'@string/Delete'", "Copy'@string/Copy'", "Compress'@string/Compress'", "Extract'@string/Extract'", "Folder'Menu'"],
        "Layout1SelectionBottomAppearance": ["60", "Fit", "Center", "Rounded", "Icon", "Expandable"],
        "Layout1Bottom": "NormBarPinned",
        "Layout1BottomContent": ["Selection'@string/Selection'", "Folder'@string/New'",  "*NewDir'@string/NewDir'", "*NewFile'@string/NewFile'", "Folder'Open'", "*OpenAssoc'@string/OpenAssoc'", "*OpenWith'@string/OpenWith'", "*OpenAs'@string/OpenAs'", "Delete'@string/Delete'", "Copy'@string/Copy'", "Compress'@string/Compress'", "Extract'@string/Extract'", "Folder'Menu'"],
        "Layout1BottomAppearance": ["60", "Fit", "Center", "Rounded", "Icon", "Expandable"],
        "Layout1Top": "NormBarPinned",
        "Layout1TopContent": ["Tabs", "NewTab"],
        "Layout1TopAppearance": ["60", "Fit", "Center", "Rounded"],
        "OperReq": "Checkbox",
        "ContextMenuLvl1": ["Folder'@string/New'",  "*NewDir'@string/NewDir'", "*NewFile'@string/NewFile'", "Folder'Open'", "*OpenAssoc'@string/OpenAssoc'", "*OpenWith'@string/OpenWith'", "*OpenAs'@string/OpenAs'", "Div", "Copy'@string/Copy'", "Cut'@string/Cut'", "Paste'@string/Paste'", "Div", "Delete'@string/Delete'", "Compress'@string/Compress'", "Extract'@string/Extract'", "Div", "CopyPath'@string/CopyPath'", "Div", "Props'@string/Properties'"],
}

Ответы (1 шт):

Автор решения: Дмитрий

Все, что вы написали, вполне ужасно. 90% всех действий и объявленных переменных абсолютно бессмысленны. Правила именования, о которых говорится на первой странице любого учебника, не соблюдаются. И так далее по списку... Если я все правильно понял (я имею в виду смысл написанного), то пробуйте примерно так:

public String[] readFullArray(String cfgFileName, String key) throws IOException, JSONException {
    return StreamSupport.stream(new JSONObject(getJsonFileContent(cfgFileName))
            .getJSONArray(key).spliterator(), false)
            .toArray(String[]::new);
}

private String getJsonFileContent(String cfgFileName) throws IOException {
    return Files.lines(Paths.get(cfgFileName)).collect(Collectors.joining(System.lineSeparator()));
}

Для чтения из файла есть много способов, в т.ч., к примеру, использовать сканер:

private String getJsonFileContent(String cfgFileName) throws IOException {
    try (Scanner scanner = new Scanner(new File(cfgFileName))) {
    StringBuilder fileContents = new StringBuilder();
        while (scanner.hasNextLine()) fileContents.append(scanner.nextLine()).append(System.lineSeparator());
        return fileContents.toString();
    }
}

Стримы можно легко заменить на цикл, тогда соответствующий метод выглядит так:

public String[] readFullArray(String cfgFileName, String key) throws IOException, JSONException {
    List<Object> list = new JSONObject(getJsonFileContent(cfgFileName)).getJSONArray(key).toList();
    String [] result = new String[list.size()];
    for (int i = 0; i < list.size(); i++) result[i] = String.valueOf(list.get(i));
    return result;
}
→ Ссылка