2015-02-01 12 views
8

के लिए उपयोगकर्ता स्क्रिप्ट के साथ कैसे प्रतिस्थापित कर सकता हूं। मैं jQuery का उपयोग किए बिना फ़ायरफ़ॉक्स में Greasemonkey के लिए उपयोगकर्ता स्क्रिप्ट बनाना चाहता हूं, जो वेबसाइट के पृष्ठ को लोड होने पर पुराने टेक्स्ट को नए टेक्स्ट द्वारा प्रतिस्थापित कर सकता है।मैं जेएसओएन स्ट्रिंग में पाठ को Greasemonkey

एचटीएमएल कोड:

.. 

window.app = profileBuilder({ 
.. 
    "page": { 
     "btn": { 
      "eye": "blue", 
      "favorite_color": "blue", 
      "gender": "male", 
     }, 
    }, 
.. 
}); 

.. 

आंख के "नीले" "हरी" द्वारा, द्वारा "लाल" और "महिला" द्वारा "पुरुष" पसंदीदा रंग के "नीले" बदलें।

जब पृष्ठ लोड हो जाएगा, उदाहरण के लिए, मैं लिंग के लिए आई और मादा (पुरुष नहीं) के लिए ग्रीन (नीला नहीं) देखना चाहता हूं।

मुझे लगता है मैं कार्यों का उपयोग करने के लिए अगले की जरूरत है:

GM_getValue() 
GM_setValue() 
JSON.parse() 
JSON.stringify() 

पुनश्च: कोड JSON सीधे पृष्ठ में है और नहीं फाइल में (../code.json)

Userscript कोड:

// ==UserScript== 
// @name  nemrod Test 
// @namespace nemrod 
// @include  http*://mywebsite.com/* 
// @version  1 
// ==/UserScript== 
var json = {"page": {"btn": {"eye": "blue","favorite_color": "blue","gender": "male",},},}; 
var stringified = JSON.stringify(json); 
stringified = stringified.replace(/"eye": "blue"/gm, '"eye": "green"'); 
stringified = stringified.replace(/"favorite_color": "blue"/gm, '"favorite_color": "red"'); 
var jsonObject = JSON.parse(stringified); 

यह काम नहीं करता है

किसी सही कोड के साथ मदद कर सकते हैं?

+0

अपनी स्क्रिप्ट या स्वयं पृष्ठ के इस भाग है? –

+0

आपने क्या प्रयास किया है और यह क्यों लगता है कि आपको उन कार्यों का उपयोग करने की आवश्यकता है? – Paul

+0

@vishalsharma यह हिस्सा पेज पर ही है। – nemrod

उत्तर

7

पहले stringify() आपका JSON।

var stringified = JSON.stringify(json); 

अगला, .replace() जावास्क्रिप्ट स्ट्रिंग फ़ंक्शन का उपयोग करें।

stringified = stringified.replace('"eye": "blue"', '"eye": "green"'); 
stringified = stringified.replace('"gender": "male"', '"gender": "female"'); 

अब parse() किसी ऑब्जेक्ट में आपका JSON।

var jsonObject = JSON.parse(stringified); 

अब, आप जो चाहें jsonObject का उपयोग कर सकते हैं।

संपादित करें: पिछले .replace() एस के बजाय इन पंक्तियों का उपयोग करें।

stringified = stringified.replace('"eye": "blue"', '"eye": "green"'); 
stringified = stringified.replace('"gender": "male"', '"gender": "female"'); 
+0

में सक्षम (अनुदान अविश्वसनीय) सक्षम किया है क्या मैं रेगेक्स का उपयोग कर सकता हूं? पसंद/"आंख": "(डी +)"/जी "आंख" को प्रतिस्थापित करें: "हरा", क्योंकि अगर मेरे पास "पसंदीदा_color" है: "नीला" हम 2 बार एक ही रंग देख सकते हैं। – nemrod

+0

आप सोच सकते हैं कि '.replace()' स्ट्रिंग फ़ंक्शन अभी और अधिक सरल है क्योंकि यह जावास्क्रिप्ट में वैसे भी प्रदान किया गया है। यदि आप चाहें तो आप RegEx का भी उपयोग कर सकते हैं। – Data2000

+0

मुझे अपना अंतिम कोड कैसे बनाना चाहिए? – nemrod

0

नियमित अभिव्यक्ति का उपयोग करने के लिए अधिक सटीक प्रक्रिया होगी।

stringified.replace(/"eyes":"blue"/gm, '"eyes":"blue"') 

इस तरह आप जानते हैं कि आप नीले रंग के लिए नीले रंग की जगह ले रहे हैं और कोई नीली दिखाई नहीं दे रहा है (पसंदीदा रंग की तरह)। नियमित अभिव्यक्ति के लिए 'g' & 'm' विकल्प वैश्विक के लिए खड़े हैं जो सभी लागू मैचों की खोज करेंगे (यदि आपके पास आपके जेसन में एक से अधिक 'आंखें हैं) और' एम 'मल्टीलाइन के लिए। यदि आपकी स्ट्रिंग multilined है।

0

पहले यात्रा - JSON.stringify

var json = {"page": {"btn": {"eye": "blue","favorite_color": "blue","gender": "male"}}}; 
 

 
var replaceBy = { 
 
    eye: function(value) { 
 
    if (value == 'blue') { 
 
     return 'green' 
 
    } 
 
    }, 
 
    favorite_color: function(value) { 
 
    if(value == 'blue') { 
 
     return 'red' 
 
    } 
 
    }, 
 
    gender: function(value) { 
 
    if(value == 'male') { 
 
     return 'female' 
 
    } 
 
    } 
 
} 
 

 
console.log(JSON.stringify(json, function(key, value) { 
 
    if(replaceBy[key]) { 
 
    value = replaceBy[key](value) 
 
    } 
 
    return value 
 
}))

दूसरा यात्रा - ES सद्भाव

  • ऐड शासन के लिए अच्छा - कहते हैं सख्त तुलना
  • ऐड मिलान - कहते हैं कोई समारोह है कि डेटा मिलान के लिए जिम्मेदार है/जगह

'use strict' 
 

 
var json = { 
 
    "page": { 
 
    "btn": { 
 
     "eye": "Blue", 
 
     "favorite_color": "blue", 
 
     "gender": "male" 
 
    } 
 
    } 
 
}; 
 

 
class Replacer { 
 
    constructor() { 
 
    this.matchers = [] 
 
    } 
 

 
    addRule(rule, source, destination) { 
 
    this.matchers.push({ 
 
     type: rule, 
 
     matcher: value => value == source ? destination : value 
 
    }) 
 
    return this 
 
    } 
 

 
    addMatcher(type, matcher) { 
 
    this.matchers.push({ 
 
     type: type, 
 
     matcher: matcher 
 
    }) 
 
    return this 
 
    } 
 

 
    getByType(type) { 
 
    return this.matchers.find(matcher => matcher.type === type) 
 
    } 
 

 
    applyRuleFor(type, value) { 
 
    if (this.getByType(type)) { 
 
     return this.getByType(type).matcher(value) 
 
    } 
 
    } 
 

 
    static replaceWith(replacer) { 
 
    return (key, value) => { 
 
     if (replacer.getByType(key)) { 
 
     value = replacer.applyRuleFor(key, value) 
 
     } 
 
     return value 
 
    } 
 
    } 
 
} 
 

 
console.log(JSON.stringify(json, Replacer.replaceWith(new Replacer() 
 
    .addMatcher('eye', (value) => value.match(/blue/i) ? 'green' : value) 
 
    .addRule('favorite_color', 'blue', 'red') 
 
    .addRule('gender', 'male', 'female'))))

संबंधित मुद्दे