Как экспортировать JSON из Basex с Java? - PullRequest
0 голосов
/ 17 февраля 2020

Чтобы построить JSONArray, как данные из BaseX экспортируются как JSON? Или запрашивается XQuery, чтобы String можно было читать с Java. Выведите как:

[
  {
    "0":"z10",
    "1":"y9",
    "2":"x7",
    "3":"atrib6",
    "name":"alice"
  },
  {
    "0":"home5",
    "1":"cell4",
    "name":"sue"
  },
  {
    "0":"phone3",
    "1":"phone2",
    "2":"phone1",
    "name":"joe"
  },
  {
    "name":"people"
  }
]

Как loadPeople выполнит обратную операцию addPeople? Должен быть ввод от String до addPeople. Где addPeople принимает JSONArray и сохраняет его с BaseX, loadPeople берет строку.

Желаемым выводом loadPeople будет тот исходный массив JSONArray, полученный из BaseX.

код:

package groupBaseX.basex.json;

import groupBaseX.io.Person;
import java.util.Properties;
import java.util.logging.Logger;
import org.basex.core.BaseXException;
import org.basex.core.Command;
import org.basex.core.Context;
import org.basex.core.cmd.Add;
import org.basex.core.cmd.List;
import org.basex.core.cmd.Open;
import org.basex.core.cmd.Set;
import org.basex.io.in.ArrayInput;
import org.json.JSONArray;
import org.json.JSONObject;

public class DatabaseHelper {

    private static final Logger log = Logger.getLogger(DatabaseHelper.class.getName());
    private Properties properties = new Properties();
    private String databaseName = null;
    private Context context = null;
    private String parserType = null;

    private DatabaseHelper() {
    }

    public DatabaseHelper(Properties properties) {
        this.properties = properties;
    }

    private void init() throws BaseXException {
        log.fine(properties.toString());
        parserType = properties.getProperty("parserType");
        databaseName = properties.getProperty("databaseName");
        context = new Context();
        log.fine(new List().execute(context));
    }

    public void loadPeople() throws BaseXException {
        init();
        log.fine(new Open(databaseName).execute(context));
        log.fine(new Set("parser", "json").execute(context));
        //
        //should return JSONArray
    }

    public void addPeople(java.util.List<Person> people) throws BaseXException {
        init();
        log.fine(new Open(databaseName).execute(context));
        log.fine(new Set("parser", "json").execute(context));
        JSONObject jsonPerson = null;
        JSONArray jsonPeople = new JSONArray();
        Command add = null;
        for (Person person : people) {
            jsonPerson = new JsonHelper(person).convert();
            jsonPeople.put(jsonPerson);
        }

        add = new Add(".json");
        add.setInput(new ArrayInput(jsonPeople.toString()));
        log.fine(add.execute(context));
    }

}

Возможно, это вопрос использования XQuery для возврата JSONArray как String? Но это кажется неловким, учитывая, что сама база данных может просто экспортировать данных.

...