简体   繁体   English

从Java中的json文件中删除Json对象

[英]Delete a Json object from a json file in java

I have a structure for a contact book: 我有一个通讯录的结构:

Contact { "Name":{ "First name":"Erm","Last Name": "Smith" }, "Number":67485647 }. 联系人{“ Name”:{“ First name”:“ Erm”,“ Last Name”:“ Smith”},“ Number”:67485647}。

I save it as a Json object and than store it in a file with createContact(). 我将其保存为Json对象,然后使用createContact()将其存储在文件中。

public class Writer {
public static final String filename ="phonebook.txt";

public void createContact (String fname, String lname,long number) throws FileNotFoundException 
{   
    JsonObjectBuilder contactBuilder = Json.createObjectBuilder();
    JsonObjectBuilder nameBuilder = Json.createObjectBuilder();
    JsonArrayBuilder  contactArrayBuilder= Json.createArrayBuilder();

    nameBuilder.add("FirstName",fname);
    nameBuilder.add("LastName",lname);

    contactBuilder.add("Name", nameBuilder);
    contactBuilder.add("Type", typeof);
    contactBuilder.add("number", number);

    JsonObject contact = contactBuilder.build();
    contactArrayBuilder.add(contact);
    JsonArray contactArray=contactArrayBuilder.build();

    //write to file
    OutputStream os = new FileOutputStream(filename);
    JsonWriter fileWriter = Json.createWriter(os);
    fileWriter.writeArray(contactArray);
    fileWriter.close();}

But I need a method that deletes an entire contact object stored in the file. 但是我需要一种删除存储在文件中的整个联系人对象的方法。 I get stuck at this. 我被困在这里。 Because I need to find the contact by its phone number and than delete it. 因为我需要通过联系人的电话号码查找联系人,然后将其删除。 What can I do? 我能做什么? I am using javax.json. 我正在使用javax.json。

public void deleteContact(long phonenumber) throws FileNotFoundException{
    InputStream is = new FileInputStream(filename);
    JsonReader fileReader = Json.createReader(is);
    JsonObject contactObj = (JsonObject) Json.createParserFactory(fileReader.readObject());
}

Your JSON can be like this : 您的JSON可以像这样:

{  
   "contacts":{  
      "989089787":{  
         "firstname":"Sentra",
         "lastname":"Kendra"
      },
      "98908978765":{  
         "firstname":"Taurus",
         "lastname":"Thampa"
      }
   }
}

And for Remove Key you can follow this link 对于删除密钥,您可以点击此链接

With javax.json is not possible to delete a single object of a json, so the best solution is to iterate over it, and don't add the ones that doesn't match to the response (Done with a jsonArray instead of a JsonObject): 使用javax.json不可能删除json的单个对象,因此最好的解决方案是对其进行迭代,并且不要添加与响应不匹配的对象(使用jsonArray而不是JsonObject完成):

public void deleteContact(long phonenumber) throws FileNotFoundException{
InputStream is = new FileInputStream(filename);
JsonReader fileReader = Json.createReader(is);
JsonArray contactObj = (JsonArray) Json.createParserFactory(fileReader.readObject());
JsonArrayBuilder factory= Json.createArrayBuilder();

for (int i = 0; i < contactObj.size(); i++) {
  if(contactObj.getJsonObject(i).getInt("Number")!=phoneNumber){
    JsonObjectBuilder nameBuilder = Json.createObjectBuilder();
    JsonArrayBuilder  contactArrayBuilder= Json.createArrayBuilder();

    nameBuilder.add("First Name",contactObj.getJsonObject(i).getJsonObject("Name").getString("First Name"));
    nameBuilder.add("Last Name",contactObj.getJsonObject(i).getJsonObject("Name").getString("Last Name"));

    contactBuilder.add("Name", nameBuilder);
    contactBuilder.add("Type", typeof);
    contactBuilder.add("number", contactObj.getJsonObject(i).getInt("Number"));
    factory.add(contactBuilder)
  }
}
JsonArray res=factory.build();
//write to file
OutputStream os = new FileOutputStream(filename);
JsonWriter fileWriter = Json.createWriter(os);
fileWriter.writeArray(contactArray);
fileWriter.close();}
}

All the documentation used is in here 所有使用的文档都在这里

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM