我可以使用Fiddler脚本修改JSON响应吗?

Cod*_*ter 1 proxy fiddler

下面是我从服务器获得的响应(正文).我想修改一些关键值对.我使用了以下方法:

var bodystr=oSession.GetResponseBodyAsString();
var bodyjson=Fiddler.WebFormats.JSON.JsonDecode(bodystr); 
Run Code Online (Sandbox Code Playgroud)

但是bodyjson没有任何我期望的内容.(我试图使用MessageBox.Show(bodyjson.Sales.Qty);但是这会给我一个错误.)

{
    "Sales" : {
        "Qty" : 1,
        "Item" : {
            "value" : "7"
        },
        "TaxCode" : {
            "value" : "NON"
        },
        "UnitPrice" : 3
    },
    "LineNum" : 0,
    "DetailType" : "Sales",
    "Amount" : 3,
    "Id" : "1"
}
Run Code Online (Sandbox Code Playgroud)

除了字符串替换方法之外,还有什么方法可以更改JSON响应吗?

Eri*_*Law 7

Fiddler的JsonDecode功能创造了一个对象; 它不会创建您期望的对象类型,即使它确实如此,更改该对象中的值也不会对构成响应主体的字符串产生任何自动影响.

有关此对象如何工作的一些见解,请参见http://www.telerik.com/forums/how-to-use-fiddler-webformats-json-jsondecode.

你需要做一些像bodyjson.JSONObject["Sales"]["Qty"]获得价值的事情.进行任何更改后,您需要调用JsonEncode该对象以获取字符串,然后将响应的主体设置为该字符串.

    var s = '{"Sales" : {  "Qty" : 8,     "Item" : {            "value" : "7"          },          "TaxCode" : {            "value" : "NON"          },          "UnitPrice" : 3        },        "LineNum" : 0,        "DetailType" : "Sales",        "Amount" : 3,        "Id" : "1"}';
    var j = Fiddler.WebFormats.JSON.JsonDecode(s);
    MessageBox.Show(j.JSONObject["Sales"]["Qty"]);
    j.JSONObject["Sales"]["Qty"] = 4;
    MessageBox.Show(Fiddler.WebFormats.JSON.JsonEncode(j.JSONObject));
Run Code Online (Sandbox Code Playgroud)

如果您只是想对正文进行微不足道的更改,请不要费心将字符串转换为对象,只需直接更改字符串本身即可.


And*_*rew 5

上面的帖子帮助我完成了这项工作,我的完整示例如下

我想在发送之前更改的JSON如下

{
   "ConsistId":"09C31636-0D8E-4C92-B09C-8413366E2D79",
   "UserName":"Test",
   "Date":"2016-07-19T13:10:00"
}


 static function OnBeforeRequest(oSession: Session) {

    if(oSession.HostnameIs("localhost")) {
        oSession["ui-backcolor"] = "lime";
        oSession["ui-bold"] = "Bold text here"

        // Convert the request body into a string
        var oBody = System.Text.Encoding.UTF8.GetString(oSession.requestBodyBytes);

        // Convert the text into a JSON object
        var j = Fiddler.WebFormats.JSON.JsonDecode(oBody);

        //Change the ConsistId value
        j.JSONObject["ConsistId"] = "A9C01636-0D8E-4C92-B09C-8413366E2D79";

        // Convert back to a byte array
        var modBytes = Fiddler.WebFormats.JSON.JsonEncode(j.JSONObject);

        // Convert json to bytes, storing the bytes in request body
        var mod = System.Text.Encoding.UTF8.GetBytes(modBytes);
        oSession.RequestBody = mod;

    }
...
Run Code Online (Sandbox Code Playgroud)

这更改了请求,因此现在需要弄清楚如何显示提示来填充GUID ID