আমার মতো স্ট্রিং আছে
string = "firstName:name1, lastName:last1";
এখন আমার এমন একটি বস্তুর আপত্তি দরকার
obj = {firstName:name1, lastName:last1}
আমি কীভাবে জেএসে এটি করতে পারি?
আমার মতো স্ট্রিং আছে
string = "firstName:name1, lastName:last1";
এখন আমার এমন একটি বস্তুর আপত্তি দরকার
obj = {firstName:name1, lastName:last1}
আমি কীভাবে জেএসে এটি করতে পারি?
উত্তর:
আসলে, সেরা সমাধানটি JSON ব্যবহার করছে:
JSON.parse(text[, reviver]);
1)
var myobj = JSON.parse('{ "hello":"world" }');
alert(myobj.hello); // 'world'
2)
var myobj = JSON.parse(JSON.stringify({
hello: "world"
});
alert(myobj.hello); // 'world'
3) জেএসএনে একটি ফাংশন পাস করা
var obj = {
hello: "World",
sayHello: (function() {
console.log("I say Hello!");
}).toString()
};
var myobj = JSON.parse(JSON.stringify(obj));
myobj.sayHello = new Function("return ("+myobj.sayHello+")")();
myobj.sayHello();
eval
পরে এটি করতে পারেন।
আপনার স্ট্রিংটি কোঁকড়া ধনুর্বন্ধনী ছাড়াই JSON স্ট্রিংয়ের মতো দেখাচ্ছে।
এটি তখন কাজ করা উচিত:
obj = eval('({' + str + '})');
obj = eval('({' + str + '})');
যদি আমি সঠিকভাবে বুঝতে পারি:
var properties = string.split(', ');
var obj = {};
properties.forEach(function(property) {
var tup = property.split(':');
obj[tup[0]] = tup[1];
});
আমি ধরে নিচ্ছি যে সম্পত্তির নামটি কোলনের বাম দিকে এবং স্ট্রিংয়ের মানটি এটি গ্রহণ করে ডানদিকে।
নোটটি Array.forEach
জাভাস্ক্রিপ্ট ১.6 - আপনি সর্বাধিক সামঞ্জস্যের জন্য একটি টুলকিট ব্যবহার করতে চাইতে পারেন।
এই সহজ উপায় ...
var string = "{firstName:'name1', lastName:'last1'}";
eval('var obj='+string);
alert(obj.firstName);
আউটপুট
name1
আপনি যদি JQuery ব্যবহার করছেন:
var obj = jQuery.parseJSON('{"path":"/img/filename.jpg"}');
console.log(obj.path); // will print /img/filename.jpg
মনে রাখবেন: ইওল মন্দ! : ডি
eval
। globalEval: /** code **/ window[ "eval" ].call( window, data ); /** more code **/
স্ট্রিংকে অবজেক্টে রূপান্তর করার জন্য আপনার JSON.parse () ব্যবহার করতে হবে:
var obj = JSON.parse('{ "firstName":"name1", "lastName": "last1" }');
যেহেতু JSON.parse () পদ্ধতিতে সঠিকভাবে কাজ করার জন্য অবজেক্ট কীগুলি উদ্ধৃতিগুলির মধ্যে আবদ্ধ হওয়া দরকার, তাই প্রথমে JSON.parse () পদ্ধতি কল করার আগে স্ট্রিংটিকে JSON ফর্ম্যাট স্ট্রিংয়ে রূপান্তর করতে হবে।
var obj = '{ firstName:"John", lastName:"Doe" }';
var jsonStr = obj.replace(/(\w+:)|(\w+ :)/g, function(matchedStr) {
return '"' + matchedStr.substring(0, matchedStr.length - 1) + '":';
});
obj = JSON.parse(jsonStr); //converts to a regular object
console.log(obj.firstName); // expected output: John
console.log(obj.lastName); // expected output: Doe
স্ট্রিংটিতে একটি জটিল অবজেক্ট (নীচের মত) থাকলেও এটি কাজ করবে এবং এটি এখনও সঠিকভাবে রূপান্তর করবে। কেবল নিশ্চিত হয়ে নিন যে স্ট্রিংটি নিজেই একক উদ্ধৃতিতে আবদ্ধ।
var strObj = '{ name:"John Doe", age:33, favorites:{ sports:["hoops", "baseball"], movies:["star wars", "taxi driver"] }}';
var jsonStr = strObj.replace(/(\w+:)|(\w+ :)/g, function(s) {
return '"' + s.substring(0, s.length-1) + '":';
});
var obj = JSON.parse(jsonStr);
console.log(obj.favorites.movies[0]); // expected output: star wars
আপনার মতো স্ট্রিং থাকলে foo: 1, bar: 2
এটির সাথে বৈধ আপদে রূপান্তর করতে পারেন:
str
.split(',')
.map(x => x.split(':').map(y => y.trim()))
.reduce((a, x) => {
a[x[0]] = x[1];
return a;
}, {});
তার জন্য # জাভাস্ক্রিপ্টে নিগলারকে ধন্যবাদ।
ব্যাখ্যা সহ আপডেট করুন:
const obj = 'foo: 1, bar: 2'
.split(',') // split into ['foo: 1', 'bar: 2']
.map(keyVal => { // go over each keyVal value in that array
return keyVal
.split(':') // split into ['foo', '1'] and on the next loop ['bar', '2']
.map(_ => _.trim()) // loop over each value in each array and make sure it doesn't have trailing whitespace, the _ is irrelavent because i'm too lazy to think of a good var name for this
})
.reduce((accumulator, currentValue) => { // reduce() takes a func and a beginning object, we're making a fresh object
accumulator[currentValue[0]] = currentValue[1]
// accumulator starts at the beginning obj, in our case {}, and "accumulates" values to it
// since reduce() works like map() in the sense it iterates over an array, and it can be chained upon things like map(),
// first time through it would say "okay accumulator, accumulate currentValue[0] (which is 'foo') = currentValue[1] (which is '1')
// so first time reduce runs, it starts with empty object {} and assigns {foo: '1'} to it
// second time through, it "accumulates" {bar: '2'} to it. so now we have {foo: '1', bar: '2'}
return accumulator
}, {}) // when there are no more things in the array to iterate over, it returns the accumulated stuff
console.log(obj)
বিভ্রান্তিকর MDN ডক্স:
ডেমো: http://jsbin.com/hiduhijevu/edit?js,console
ফাংশন:
const str2obj = str => {
return str
.split(',')
.map(keyVal => {
return keyVal
.split(':')
.map(_ => _.trim())
})
.reduce((accumulator, currentValue) => {
accumulator[currentValue[0]] = currentValue[1]
return accumulator
}, {})
}
console.log(str2obj('foo: 1, bar: 2')) // see? works!
আমি কয়েকটি লাইনের কোডে একটি সমাধান কার্যকর করেছি যা বেশ নির্ভরযোগ্যভাবে কাজ করে।
এইচটিএমএল উপাদান থাকা যেখানে আমি কাস্টম বিকল্পগুলি পাস করতে চাই:
<div class="my-element"
data-options="background-color: #dadada; custom-key: custom-value;">
</div>
একটি ফাংশন কাস্টম বিকল্পগুলি বিশ্লেষণ করে এবং এটি কোনও জায়গায় ব্যবহার করার জন্য কোনও বস্তু ফেরত দেয়:
function readCustomOptions($elem){
var i, len, option, options, optionsObject = {};
options = $elem.data('options');
options = (options || '').replace(/\s/g,'').split(';');
for (i = 0, len = options.length - 1; i < len; i++){
option = options[i].split(':');
optionsObject[option[0]] = option[1];
}
return optionsObject;
}
console.log(readCustomOptions($('.my-element')));
data-
কিছু ফ্রেমওয়ার্ক / লাইব্রেরির মতো সিউডো-কাস্টম বৈশিষ্ট্য তৈরি করার পরিবর্তে বৈশিষ্ট্যটি ব্যবহার করার জন্য +1 ।
string = "firstName:name1, lastName:last1";
এটি কাজ করবে:
var fields = string.split(', '),
fieldObject = {};
if( typeof fields === 'object') ){
fields.each(function(field) {
var c = property.split(':');
fieldObject[c[0]] = c[1];
});
}
তবে এটি দক্ষ নয়। আপনার যদি এরকম কিছু থাকে তখন কী হয়:
string = "firstName:name1, lastName:last1, profileUrl:http://localhost/site/profile/1";
split()
'http' বিভক্ত হবে। সুতরাং আমি আপনাকে পাইপের মতো একটি বিশেষ সীমানা ব্যবহার করার পরামর্শ দিচ্ছি
string = "firstName|name1, lastName|last1";
var fields = string.split(', '),
fieldObject = {};
if( typeof fields === 'object') ){
fields.each(function(field) {
var c = property.split('|');
fieldObject[c[0]] = c[1];
});
}
এটি সর্বজনীন কোড your
var string = "firstName:name1, lastName:last1";
var pass = string.replace(',',':');
var arr = pass.split(':');
var empty = {};
arr.forEach(function(el,i){
var b = i + 1, c = b/2, e = c.toString();
if(e.indexOf('.') != -1 ) {
empty[el] = arr[i+1];
}
});
console.log(empty)
তোমার ক্ষেত্রে
var KeyVal = string.split(", ");
var obj = {};
var i;
for (i in KeyVal) {
KeyVal[i] = KeyVal[i].split(":");
obj[eval(KeyVal[i][0])] = eval(KeyVal[i][1]);
}
var stringExample = "firstName:name1, lastName:last1 | firstName:name2, lastName:last2";
var initial_arr_objects = stringExample.split("|");
var objects =[];
initial_arr_objects.map((e) => {
var string = e;
var fields = string.split(','),fieldObject = {};
if( typeof fields === 'object') {
fields.forEach(function(field) {
var c = field.split(':');
fieldObject[c[0]] = c[1]; //use parseInt if integer wanted
});
}
console.log(fieldObject)
objects.push(fieldObject);
});
"অবজেক্টস" অ্যারেতে সমস্ত অবজেক্ট থাকবে
আমি জানি এটি একটি পুরানো পোস্ট তবে প্রশ্নের সঠিক উত্তরটি দেখেনি।
var jsonStrig = '{';
var items = string.split(',');
for (var i = 0; i < items.length; i++) {
var current = items[i].split(':');
jsonStrig += '"' + current[0] + '":"' + current[1] + '",';
}
jsonStrig = jsonStrig.substr(0, jsonStrig.length - 1);
jsonStrig += '}';
var obj = JSON.parse(jsonStrig);
console.log(obj.firstName, obj.lastName);
আপনি এখন কোনও অবজেক্টের সাহায্যে মানগুলি যেমন ব্যবহার করতে পারেন তেমন ব্যবহার করতে obj.firstName
এবং obj.lastName
পেতে পারেন ।