add -r to DM

$ out/Debug/dm -w good
$ out/Debug/dm -r good -w bad && echo "hooray no diffs!"

BUG=skia:

Review URL: https://codereview.chromium.org/863093003
diff --git a/dm/DMJsonWriter.cpp b/dm/DMJsonWriter.cpp
index 8aea814..56c1301 100644
--- a/dm/DMJsonWriter.cpp
+++ b/dm/DMJsonWriter.cpp
@@ -8,6 +8,7 @@
 #include "DMJsonWriter.h"
 
 #include "SkCommonFlags.h"
+#include "SkData.h"
 #include "SkJSONCPP.h"
 #include "SkOSFile.h"
 #include "SkStream.h"
@@ -79,4 +80,31 @@
     stream.flush();
 }
 
+bool JsonWriter::ReadJson(const char* path, void(*callback)(BitmapResult)) {
+    SkAutoTUnref<SkData> json(SkData::NewFromFileName(path));
+    if (!json) {
+        return false;
+    }
+
+    Json::Reader reader;
+    Json::Value root;
+    const char* data = (const char*)json->data();
+    if (!reader.parse(data, data+json->size(), root)) {
+        return false;
+    }
+
+    const Json::Value& results = root["results"];
+    BitmapResult br;
+    for (unsigned i = 0; i < results.size(); i++) {
+        const Json::Value& r = results[i];
+        br.name       = r["key"]["name"].asCString();
+        br.config     = r["key"]["config"].asCString();
+        br.sourceType = r["key"]["source_type"].asCString();
+        br.ext        = r["ext"].asCString();
+        br.md5        = r["md5"].asCString();
+        callback(br);
+    }
+    return true;
+}
+
 } // namespace DM