20

I have written json code in string and i want to send it using xmlhttp as .json file. Is it possible to do it with blob?

var cleanScript = {
    'type': 'script',
    'api_key': api_key,
    'data': data,
    'inputs': inputs,
    'timeoutSeconds': timeoutSeconds
};
var jsonse = JSON.stringify(cleanScript, null, 2); 

Now json to blob?

Nurdin
  • 23,382
  • 43
  • 130
  • 308
josaric
  • 367
  • 1
  • 3
  • 10

2 Answers2

53

Try something like this

var cleanScript = {
    'type': 'script',
    'api_key': api_key,
    'data': data,
    'inputs': inputs,
    'timeoutSeconds': timeoutSeconds
};
var jsonse = JSON.stringify(cleanScript);
var blob = new Blob([jsonse], {type: "application/json"});
var url  = URL.createObjectURL(blob);

var a = document.createElement('a');
a.href        = url;
a.download    = "backup.json";
a.textContent = "Download backup.json";

document.getElementById('json').appendChild(a);
<div id="json"></div>
Quentin
  • 914,110
  • 126
  • 1,211
  • 1,335
Gildas.Tambo
  • 22,173
  • 7
  • 50
  • 78
1

Try the code below:

    var int2ByteArray = function(i, minByteCount) {
        var result = [],
            buf = code = +i,
            offsetCount = 0;
        while ((buf = code>>(8 * offsetCount)) || offsetCount < minByteCount) {
            buf = buf & 0xFF;
            ++offsetCount;
            result.push(buf);
        }
        return result.reverse();
    };

    var ascii2ByteArray = function(s) {

        if (!s) return 0;
        var result = [];
        [].map.call(s, function(c) {
            result = result.concat(int2ByteArray((typeof(c)).toLowerCase() == "number" ? c : c.charCodeAt(0)));
        });
        return result;
    };

    // You got the blob here, do whatever you want.
    var blob = new Blob(new Uint8Array(ascii2ByteArray(jsonse)), {type:"text/json"});

The matrix is to convert a string(stringfied by JSON.stringify) in to a Uint8Array that could be used making a blob. I happened make something like that before, hope it's useful.

yarmyarch
  • 19
  • 2