как сформировать JSON объект - PullRequest
1 голос
/ 03 октября 2019

Я хочу преобразовать следующий JSON, используя JsonObect и JsonArray, но не могу этого сделать.

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "customer.partnerName": "Synapse"
          }
        },
        {
          "range": {
            "customer.billing.chargeAmount": {
              "gte": 1,
              "lte": 100
            }
          }
        }
      ],
      "filter": [
        {
          "match": {
            "customer.configId": 15
          }
        }
      ]
    }
  }
}

Я пытался использовать JsonObject, но не смог достичь результата.

Ответы [ 6 ]

1 голос
/ 03 октября 2019

Попробуйте: -

                 JSONObject jsonObject = new JSONObject(/*Pass your string value here*/ new JSONTokener(result.toString()).nextValue().toString());

             //get 'query' as JSONObject
              JSONObject jresponseData = new JSONObject(jsonObject.getString("query"));

              //since 'bool' is insode 'query'
              JSONObject jresponseData_2 =jresponseData.getString("bool");

              JSONArray jsonArray = new JSONArray(jresponseData_2.getString("must"));

И вы получите результат в JSONArray

0 голосов
/ 03 октября 2019

Это просто копирование / вставка вашей строки json в AndroidStudio, она автоматически разбивает строку и добавляет escape-слеши ... выглядит ужасно, но синтаксис, который вы написали, совершенно нормален ..

    String jsonString = " {\n" +
            "                        \"query\": {\n" +
            "                        \"bool\": {\n" +
            "                            \"must\": [\n" +
            "                                    {\"match\": \n" +
            "            { \"customer.partnerName\":   \"Synapse\"  }},\n" +
            "\n" +
            "                                    {\n" +
            "\"range\" : \n" +
            "{\n" +
            "                                        \"customer.billing.chargeAmount\" : {\n" +
            "                                            \"gte\" : 1,\n" +
            "                                            \"lte\" : 100\n" +
            "                                        }\n" +
            "                                    }}\n" +
            "                            ],\n" +
            "                            \"filter\": [\n" +
            "                                    { \"match\":  { \"customer.configId\": 15 }}\n" +
            "                            ]\n" +
            "                        }\n" +
            "                    }\n" +
            "                    }";

    // HERE BEAUTIFIED
    /*jsonString = "{\"query\":{\"bool\":{\"must\":[{\"match\":{\"customer.partnerName\":\"Synapse\"}},{\"range\":{\"customer.billing.chargeAmount\":{\"gte\":1,\"lte\":100}}}],\"filter\":[{\"match\":{\"customer.configId\":15}}]}}}";
     */

    try {
        JSONObject object = new JSONObject(jsonString);

        // NO ERRORS, OBJECT CREATED IN MY CASE
    } catch (JSONException e) {
        e.printStackTrace();
    }

второй вариант, который у вас есть, заключается в том, чтобы создать объект и внутренние объекты и массивы программно .. как это ..

    try {

        JSONObject jsonObject = new JSONObject();


        JSONObject query = new JSONObject();
        jsonObject.put("query", query);


        JSONObject bool = new JSONObject();
        query.put("bool", bool);


        JSONArray must = new JSONArray();
        bool.put("must", must);


        JSONObject matchWrap = new JSONObject();

        JSONObject match = new JSONObject();
        match.put("customer.partnerName", "Synapse");

        matchWrap.put("match", match);

        must.put(matchWrap);


        JSONObject rangeWrap = new JSONObject();

        JSONObject range = new JSONObject();

        JSONObject customerBillingChargeAmount = new JSONObject();
        customerBillingChargeAmount.put("gte", 1);
        customerBillingChargeAmount.put("lte", 100);

        range.put("customer.billing.chargeAmount", customerBillingChargeAmount);

        rangeWrap.put("range", range);


        must.put(rangeWrap);




        JSONArray filter = new JSONArray();
        bool.put("filter", filter);


        JSONObject match2Wrap = new JSONObject();

        JSONObject match2 = new JSONObject();
        match2.put("customer.configId", 15);

        match2Wrap.put("match", match2);


        filter.put(match2Wrap);



        String jsonString2 = jsonObject.toString();

        // HERE THE SAME JSON STRING AS YOUR INPUT

    } catch (JSONException e) {
        e.printStackTrace();
    }

Это приводит к тому же результату, что и ваша входная строка, когда убираются символы табуляции пробелов, переводы строки и т.д ..

0 голосов
/ 03 октября 2019

Итак, я бы сказал, что вы должны использовать JsonPath lib для этого.

        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <version>2.4.0</version>
        </dependency>

Пример использования

import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;

...

public void handle(...) {
...
  DocumentContext jsonContext = JsonPath.parse(responseBody);
  JSONArray jsonPathPreviousUrl = jsonContext.read("$..previous")
...

Это будет анализировать ваш json быстро, эффективно.

{
  "feed": {
    "data": [
      {
        "created_time": "2017-12-12T01:24:21+0000",
        "message": "This picture of my grandson with Santa",
        "id": ""
      },
      {
        "created_time": "",
        "message": "",
        "id": ""
      },
      {
        "created_time": "",
        "message": "",
        "id": ""
      }
    ],
    "paging": {
      "previous": "https://facebook/v3.2/{your-user-id}/feed?format=json&limit=3&since=1542820440",
      "next": "https://facebook/v3.2/{your-user-id}/feed?format=json&limit=3&until=1542583212&"
    }
  },
  "id": "{your-user-id}"
}

Javadoc для json-path

Статья Baeldung

}

0 голосов
/ 03 октября 2019

Если вы пытались Google gson? Вот репо, также вы можете найти соответствующие реализации в Интернете, а также. https://github.com/google/gson

0 голосов
/ 03 октября 2019
<script>
var txt = '{"query": {"bool": {"must": [{"match": { "customer.partnerName":   "Synapse"  }},{"range" : {                                        "customer.billing.chargeAmount" : {                                            "gte" : 1,                                            "lte" : 100                                        }                                    }}],"filter": [{ "match":  { "customer.configId": 15 }}]}}}'
var obj = JSON.parse(txt);
debugger;
document.getElementById("demo").innerHTML = obj.query;
</script>
0 голосов
/ 03 октября 2019

Я думаю, что вы ищете для анализа json. Это делается следующим образом:

JsonParser parser = new JsonParser();
JsonObject object = (JsonObject) parser.parse(jsonData); //Insert json string data
//Do other stuff
...