Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
JSON_config = {
	name: "[[User:DannyS712/JSON.js|JSON]]",
	version: 1.0,
	debug: false,
	manual: true
};
mw.loader.using( 'mediawiki.util', function () {
    $(document).ready( function () {
    	if (JSON_config.manual) {
	        var link = mw.util.addPortletLink( 'p-cactions', null, 'Get JSON', 'ca-get-JSON', 'get the JSON of this page'); 
	        $( link ).click( function ( event ) {
	            event.preventDefault();
	            console.log( get_JSON( mw.config.get( 'wgPageName' ) ) );
	        } );
    	}
    } );
} );
function get_JSON ( page ){
	if (JSON_config.debug) console.log( location );
	var get_page = {
        action: 'query',
        titles: page,
        prop: 'revisions',
        rvprop: 'content',
        format: 'json',
        formatversion: 2
    };
    var result = null;
	var scriptUrl = mw.config.get( 'wgScriptPath' ) + '/api.php';
	$.ajax({
		url: scriptUrl,
		type: 'get',
		data: get_page,
		dataType: 'json',
		async: false,
		success: function(data) {
		    var text = data.query.pages["0"].revisions["0"].content;
	    	if (JSON_config.debug) console.log ( data );
	    	if (JSON_config.debug) console.log( "Text:", text, "End text" );
	    	var JSONed = JSON.parse( text );
	    	var arr_JSONed = [];
	    	for (var reminder in JSONed){
	    		arr_JSONed.push(JSONed[reminder]);
	    	}
	    	if (JSON_config.debug) console.log( arr_JSONed );
	    	result = arr_JSONed;
		} 
	});
	return result;
}
function set_JSON ( page, new_content, edit_summary, on_success ){
	if (JSON_config.debug) console.log( page, new_content, edit_summary );
	$.ajax({
	    url: mw.util.wikiScript( 'api' ),
	    data: {
	        format: 'json',
	        action: 'edit',
	        title: page,
	        text: new_content,
	        summary: edit_summary,
	        token: getToken()
	    },
	    dataType: 'json',
	    type: 'POST',
	    success: function( data ) {
	        if ( data && data.edit && data.edit.result == 'Success' ) {
	            if (on_success) alert( on_success );
	        } else if ( data && data.error ) {
	            alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
	        } else {
	            alert( 'Error: Unknown result from API.' );
	        }
	    },
	    error: function( xhr ) {
	        alert( 'Error: Request failed.' );
	    } } );
}
function getToken() {
	var tokenReq = {
        action: 'query',
        meta: 'tokens',
        format: 'json'
	};
     var result = null;
     var scriptUrl = mw.config.get( 'wgScriptPath' ) + '/api.php';
     $.ajax({
        url: scriptUrl,
        type: 'get',
        data: tokenReq,
        dataType: 'json',
        async: false,
        success: function(data) {
            result = data.query.tokens.csrftoken;
        } 
     });
     return result;
}