Interface JSONDelta


public interface JSONDelta
Structural delta type for JSON.

A JSONDelta describes the differences between two JSON values. Unlike a binary delta, a structural delta can be queried to determine its effect. The removed() and inserted() methods provide full details of the differences between the two values.

An instance can be created from two JSON values using JSON.diff(JSON).

JSONDeltas are useful for identifying small changes to complex JSON values. Here's any example of how to use this class to filter interesting changes in a ValueStream.

 public class ExampleStream implements ValueStream<JSON> {
   public void onValue(String topicPath, JSON oldValue, JSON newValue) {
     JSONDelta delta = newValue.diff(oldValue);

     if (!delta.removed().intersection("/address").isEmpty() ||
         !delta.inserted().intersection("/address").isEmpty()) {

         // The "address" field has changed.
         processAddress(newValue);
     }
   }

   // ...
 }
 
Since:
5.7
Author:
DiffusionData Limited
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Interface
    Description
    static interface 
    An unmodifiable map describing the changes to a JSON value.
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    Returns whether the two JSON values used to create this instance are different.
    Returns the parts of the second JSON value not found in the first JSON value.
    Returns the parts of the first JSON value not found in the second JSON value.
  • Method Details

    • removed

      Returns the parts of the first JSON value not found in the second JSON value.
      Returns:
      the removed parts. The JSON Pointer references used for the keys are relative to first JSON value.
    • inserted

      Returns the parts of the second JSON value not found in the first JSON value.
      Returns:
      the removed parts. The JSON Pointer references used for the keys are relative to second JSON value.
    • hasChanges

      boolean hasChanges()
      Returns whether the two JSON values used to create this instance are different. It is equivalent to {!@code inserted().isEmpty() || !removed().isEmpty()}.
      Returns:
      true if this delta has an effect