Java'daki json nesnesinden bir json nesnesini kaldırma

İnternetten indirdiğim bu json dosyasına sahibim:

 {
"price": 1,
"empty": [
  0,
  0,
  0,
  0,
  0
],
"lowValue": 0,
"highValue": 0
},

ve her şeyi silmek istiyorum

"boş": [

için

]

I've spent a few hours looking at regex stuff and I can't seem için figure out how için make it do what I want it için do.

Edit: Annamalai Thangaraj's method works until I add more için the file.

{
"price": 1,
"empty": [
  0,
  0,
  0,
  0,
  0
],
"lowValue": 0,
"highValue": 0
},
{
"price": 500,
"empty": [
  5,
  0,
  3,
  6,
  9
],
"lowValue": 4,
"highValue": 2
}

şimdi bana bir hata verdim:

Exception in thread "main" java.lang.ClassCastException: com.google.gson.JsonArray cannot be cast için com.google.gson.JsonObject

Kodum tam olarak:

public static void go() throws IOException {
    JsonObject jsonObject = (JsonObject)JsonParser.parse(new FileReader(location));
    jsonObject.remove("empty");

    JsonArray jsonArray = (JsonArray)JsonParser.parse(new FileReader(location));


    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    JsonParser jp = new JsonParser();
    JsonElement je = jp.parse(jsonObject.içinString());
    String prettyJsonString = gson.içinJson(je);

    FileWriter file = new FileWriter(System.getProperties().getProperty("user.home")+"\\output.json");
    try {
        file.write(prettyJsonString);
        System.out.println("Successfully wrote JSON object için file.");

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

    } finally {
        file.flush();
        file.close();
    }
}
1
... yani "boş" anahtardan kurtulmak istiyor musun?
katma yazar Makoto, kaynak
... yani "boş" anahtardan kurtulmak istiyor musun?
katma yazar Makoto, kaynak
Bunun ne kadar güçlü olması gerekiyor? Sadece bu metinle mi uğraşıyorsun? Bu formattaki dosyalar, ancak potansiyel olarak farklı değerler? Keyfi JSON?
katma yazar Michelle, kaynak
Bunun ne kadar güçlü olması gerekiyor? Sadece bu metinle mi uğraşıyorsun? Bu formattaki dosyalar, ancak potansiyel olarak farklı değerler? Keyfi JSON?
katma yazar Michelle, kaynak
Bir JSON kütüphanesi kullanmak isteyebilirsiniz. json.org adresinde bir liste var.
katma yazar Michelle, kaynak
Bir JSON kütüphanesi kullanmak isteyebilirsiniz. json.org adresinde bir liste var.
katma yazar Michelle, kaynak
Evet, bu formattaki dosyalar farklı değerlerle. Bunun 1,666,144 satırı var.
katma yazar Corey, kaynak
Evet, bu formattaki dosyalar farklı değerlerle. Bunun 1,666,144 satırı var.
katma yazar Corey, kaynak

8 cevap

Jackson gibi bir JSON kütüphanesi kullanın:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

import java.io.IOException;

public class JsonDelete {

    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        String json = "{\"key\":\"value\",\"empty\":[]}";

        ObjectNode node = (ObjectNode) mapper.readTree(json);
        node.remove("empty");

        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(node));
    }

}

Çıktılar:

{
  "key" : "value"
}
1
katma

Jackson gibi bir JSON kütüphanesi kullanın:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

import java.io.IOException;

public class JsonDelete {

    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        String json = "{\"key\":\"value\",\"empty\":[]}";

        ObjectNode node = (ObjectNode) mapper.readTree(json);
        node.remove("empty");

        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(node));
    }

}

Çıktılar:

{
  "key" : "value"
}
1
katma

Json'dan empty öğesini kaldırmak için aşağıdaki kodu kullanın.

JSONObject jsonObject = (JSONObject) jsonParser.parse(new FileReader("File Path"));
jsonObject .remove("empty");

JSON'u hedeflemek için jsonObject.toJSONString() öğesini kullanarak empty öğesini kaldırdıktan sonra, JSON'un yapısı şu şekilde görünecektir.

 {
"price": 1,
"lowValue": 0,
"highValue": 0
},
1
katma

Json'dan empty öğesini kaldırmak için aşağıdaki kodu kullanın.

JSONObject jsonObject = (JSONObject) jsonParser.parse(new FileReader("File Path"));
jsonObject .remove("empty");

JSON'u hedeflemek için jsonObject.toJSONString() öğesini kullanarak empty öğesini kaldırdıktan sonra, JSON'un yapısı şu şekilde görünecektir.

 {
"price": 1,
"lowValue": 0,
"highValue": 0
},
1
katma

Ayrıca bazı alanları göz ardı ederek jsonunuzu ayrıştırabilirsiniz. Şu örneğe bakın:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

@JsonIgnoreProperties(value = { "empty" })
public class Item {

    private long price;
    private long lowValue;
    private long highValue;

    public long getPrice() {
        return price;
    }

    public void setPrice(long price) {
        this.price = price;
    }

    public long getLowValue() {
        return lowValue;
    }

    public void setLowValue(long lowValue) {
        this.lowValue = lowValue;
    }

    public long getHighValue() {
        return highValue;
    }

    public void setHighValue(long highValue) {
        this.highValue = highValue;
    }

    @Override
    public String toString() {
        return "Item [price=" + price + ", lowValue=" + lowValue + ", highValue=" + highValue + "]";
    }

    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {

        String file = "c:\\json";

        ObjectMapper mapper = new ObjectMapper();

        Item[] items = mapper.readValue(new File(file), Item[].class);
        for (Item item : items) {
            System.out.println(item);
        }

    }

}

c: \ json içerir:

    [
    {
        "price": 1,
        "empty": [
          0,
          0,
          0,
          0,
          0
        ],
        "lowValue": 0,
        "highValue": 0
    },
    {
        "price": 2,
        "empty": [
          0,
          0,
          0,
          0,
          0
        ],
        "lowValue": 3,
        "highValue": 4
    }
]

Çıkış:

Item [price=1, lowValue=0, highValue=0]
Item [price=2, lowValue=3, highValue=4]
0
katma

Ayrıca bazı alanları göz ardı ederek jsonunuzu ayrıştırabilirsiniz. Şu örneğe bakın:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

@JsonIgnoreProperties(value = { "empty" })
public class Item {

    private long price;
    private long lowValue;
    private long highValue;

    public long getPrice() {
        return price;
    }

    public void setPrice(long price) {
        this.price = price;
    }

    public long getLowValue() {
        return lowValue;
    }

    public void setLowValue(long lowValue) {
        this.lowValue = lowValue;
    }

    public long getHighValue() {
        return highValue;
    }

    public void setHighValue(long highValue) {
        this.highValue = highValue;
    }

    @Override
    public String toString() {
        return "Item [price=" + price + ", lowValue=" + lowValue + ", highValue=" + highValue + "]";
    }

    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {

        String file = "c:\\json";

        ObjectMapper mapper = new ObjectMapper();

        Item[] items = mapper.readValue(new File(file), Item[].class);
        for (Item item : items) {
            System.out.println(item);
        }

    }

}

c: \ json içerir:

    [
    {
        "price": 1,
        "empty": [
          0,
          0,
          0,
          0,
          0
        ],
        "lowValue": 0,
        "highValue": 0
    },
    {
        "price": 2,
        "empty": [
          0,
          0,
          0,
          0,
          0
        ],
        "lowValue": 3,
        "highValue": 4
    }
]

Çıkış:

Item [price=1, lowValue=0, highValue=0]
Item [price=2, lowValue=3, highValue=4]
0
katma

Json dosyasının sonunda bir '[' ve ']' yazarsanız, geçerli bir json dosyası olur. Senin json dosyasında olduğu gibi olmalı.

[
    {
    "price": 1,
    "empty": [
      0,
      0,
      0,
      0,
      0
    ],
    "lowValue": 0,
    "highValue": 0
    },
    {
    "price": 500,
    "empty": [
      5,
      0,
      3,
      6,
      9
    ],
    "lowValue": 4,
    "highValue": 2
    }
]

Yani son program şöyle olacak: -

public class ReadJSONFromFile {
    public static void main(String[] args) {
        JSONParser parser = new JSONParser();
        try {
            Object obj = parser.parse(new FileReader("locationOfFIle"));
            JSONArray array = (JSONArray) obj;
            FileWriter file = new FileWriter("locationOfFIle");
            for (int index = 0; index < array.size(); ++index) {
                JSONObject jsonObject = (JSONObject) array.get(index);
                jsonObject.remove("empty");
                file.write(jsonObject.toJSONString());
                file.flush();
                if (index == array.size() - 1)
                    file.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
0
katma

Json dosyasının sonunda bir '[' ve ']' yazarsanız, geçerli bir json dosyası olur. Senin json dosyasında olduğu gibi olmalı.

[
    {
    "price": 1,
    "empty": [
      0,
      0,
      0,
      0,
      0
    ],
    "lowValue": 0,
    "highValue": 0
    },
    {
    "price": 500,
    "empty": [
      5,
      0,
      3,
      6,
      9
    ],
    "lowValue": 4,
    "highValue": 2
    }
]

Yani son program şöyle olacak: -

public class ReadJSONFromFile {
    public static void main(String[] args) {
        JSONParser parser = new JSONParser();
        try {
            Object obj = parser.parse(new FileReader("locationOfFIle"));
            JSONArray array = (JSONArray) obj;
            FileWriter file = new FileWriter("locationOfFIle");
            for (int index = 0; index < array.size(); ++index) {
                JSONObject jsonObject = (JSONObject) array.get(index);
                jsonObject.remove("empty");
                file.write(jsonObject.toJSONString());
                file.flush();
                if (index == array.size() - 1)
                    file.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
0
katma