Ejemplo n.º 1
0
  private void parseJson() throws Exception {

    // Read JSON source
    if (data.file != null) {
      data.jsonReader.readFile(data.filename);
    } else {
      if (meta.isReadUrl()) {
        data.jsonReader.readUrl(data.stringToParse);
      } else {
        // read string
        data.jsonReader.readString(data.stringToParse);
      }
    }
    List<NJSONArray> resultList = new ArrayList<NJSONArray>();
    data.nrrecords = -1;
    data.recordnr = 0;
    String prevPath = "";
    for (int i = 0; i < data.nrInputFields; i++) {
      String path = meta.getInputFields()[i].getPath();
      NJSONArray ja = data.jsonReader.getPath(path);
      if (data.nrrecords != -1 && data.nrrecords != ja.size() && !ja.isNull()) {
        throw new KettleException(
            BaseMessages.getString(
                PKG, "JsonInput.Error.BadStructure", ja.size(), path, prevPath, data.nrrecords));
      }
      resultList.add(ja);
      if (data.nrrecords == -1 && !ja.isNull()) {
        data.nrrecords = ja.size();
      }
      prevPath = path;
    }

    data.resultList = new ArrayList<NJSONArray>();

    Iterator<NJSONArray> it = resultList.iterator();

    while (it.hasNext()) {
      NJSONArray j = it.next();
      if (j.isNull()) {
        if (data.nrrecords == -1) {
          data.nrrecords = 1;
        }
        // The object is empty means that we do not
        // find Json path
        // We need here to create a dummy structure
        j = new NJSONArray();
        for (int i = 0; i < data.nrrecords; i++) {
          j.add(null);
        }
      }
      data.resultList.add(j);
    }
    resultList = null;

    if (log.isDetailed()) {
      logDetailed(BaseMessages.getString(PKG, "JsonInput.Log.NrRecords", data.nrrecords));
    }
  }
  public NJSONArray getPath(String value) throws KettleException {
    try {
      String ro = getInvocable().invokeFunction(JSON_PATH, value).toString();
      if (!ro.equals(EVAL_FALSE)) {

        NJSONArray ra = new NJSONArray((JSONArray) JSONValue.parse(ro));
        return ra;
      } else {
        if (!isIgnoreMissingPath())
          throw new KettleException(
              BaseMessages.getString(PKG, "JsonReader.Error.CanNotFindPath", value));
      }
    } catch (Exception e) {
      throw new KettleException(e);
    }

    // The Json Path is missing
    // and user do not want to fail
    // so we need to populate it with NULL values
    NJSONArray ja = new NJSONArray();
    ja.setNull(true);

    return ja;
  }