Corey
Corey

Reputation: 331

Removing a json object from a json file in Java

I have this json file I downloaded online:

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

and I want to delete everything from

"empty": [

to

],

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

Edit: Annamalai Thangaraj's method works until I add more to 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
}

which now I'm given an error:

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

My code is exactly:

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.toString());
    String prettyJsonString = gson.toJson(je);

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

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

    } finally {
        file.flush();
        file.close();
    }
}

Upvotes: 2

Views: 17944

Answers (4)

devops
devops

Reputation: 9179

You can also parse your json by ignoring some fields. Look at this example:

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 contains:

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

Output is:

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

Upvotes: 0

Kunal Talwadiya
Kunal Talwadiya

Reputation: 1

If you put a '[' at the beginning and a ']' at the end of json file, it becomes a valid json file. Like in your json file, It should be.

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

So the final program will be like:--

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();
        }
    }
}

Upvotes: 0

Annamalai Thangaraj
Annamalai Thangaraj

Reputation: 532

Use the following code to remove element empty from json

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

After removing empty element using jsonObject.toJSONString() to get target JSON, Now structure of JSON will be look like this

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

Upvotes: 3

Upio
Upio

Reputation: 1374

Use a JSON library like Jackson:

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));
    }

}

Outputs:

{
  "key" : "value"
}

Upvotes: 1

Related Questions