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

时间:2018-01-10 16:33:56

标签: java json

我有一个联系簿结构:

联系{“姓名”:{“名字”:“Erm”,“姓氏”:“史密斯”},“号码”:67485647}。

我将其保存为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();}

但是我需要一个方法来删除存储在文件中的整个联系对象。我对此感到困惑。因为我需要通过电话号码找到联系人而不是删除它。我能做什么?我正在使用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());
}

2 个答案:

答案 0 :(得分:0)

您的JSON可以是这样的:

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

对于移除密钥,您可以按照此link

进行操作

答案 1 :(得分:0)

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

所有使用的文档都在here